如要瞭解 VHLO,請參閱 vhlo.md
。
提供不相容的變更
所有可能影響相容性的變更都必須經過 RFC 程序。包括新增、淘汰或重新命名功能。RFC 核准後,您必須完成下列步驟:
1. 在 Version.h 中調高版本號碼,並更新版本記錄
在更新 VHLO 運算、屬性、類型或轉換之前,請先在 Version.h 中增加次要版本編號,然後更新 VhloDialect.td 中的版本記錄
任何新增的 VHLO 功能都會使用這個串場廣告版本,例如擴散 0.10.0 --> 0.11.0
後,VhloOps.td 中的新運算會使用:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. 新增必要的 VHLO 導入和轉換
整合新功能所需的確切程式碼將有所不同,但在大部分情況下,必須變更下列事項:
- 針對新作業:
- 在 VhloOps.td 中新增運算
- 在 StablehloLegalizeToVhlo.cpp 中新增 StableHLO 至 VHLO 轉換
- 在 VhloLegalizeToStablehlo.cpp 中新增 VHLO → StableHLO 轉換
- 如果是現有作業的新版本:
- 在 VhloOps.td 中新增 op
- 更新 MapStablehloToVhlo.h 中的 StableHLO 至 VHLO 對應
- 在 VhloToVersion.cpp 中新增舊版與新版 op 之間的轉換
- 如為新類型或屬性:
- 在 VhloTypes.td 中新增類型,或在 VhloAttrs.td 中新增屬性
- 在 StablehloLegalizeToVhlo.cpp 中新增 StableHLO 至 VHLO 轉換
- 在 VhloLegalizeToStablehlo.cpp 中新增 VHLO → StableHLO 轉換
3. 新增/更新單元測試
不相容變更的貢獻者負責執行該功能的正面和負面單元測試,以及相容性單元測試。
相容性單元測試包括更新 stablehlo_legalize_to_vhlo.mlir,以確保 StableHLO 可與最新版的 VHLO 進行往返,以及任何必要的額外前向或回溯相容性測試。例如,如果透過 Y = X - 1
在 X
版本新增運算,請新增測試檔案 (例如 vhlo_to_version_downgrade_invalid.0_Y_0.mlir
),顯示該運算在 X
版本之前不受支援。如要新增 Ops 版本,請新增測試檔案 (例如 vhlo_to_version_downgrade.0_Y_0.mlir
),顯示運算成功降級。
如果作業含有預設屬性,請加入測試,證明預設值已正確序列化和反序列化。
4. 新增版本化序列化測試
在 stablehlo_legalize_to_vhlo.mlir
中新增測試後,請將具有最大版本的版本化測試檔案複製到新版本的新檔案中,並將新測試新增至該檔案。您還需要使用 stablehlo-translate
建立相關聯的 bytecode 檔案:
export TARGET_VERSION=1.X.0
export TARGET_FILENAME=${TARGET_VERSION//./_}
stablehlo-translate --serialize --target=$TARGET_VERSION --strip-debuginfo stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir > stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir.bc