如需了解 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 中添加操作
- 在 MapStablehloToVhlo.h 中将 StableHLO 更新为 VHLO 映射
- 在 VhloToVersion.cpp 中添加新旧版本操作之间的转换
- 对于新类型或属性:
- 在 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
之前不受支持。如果添加操作的新版本,请添加一个类似 vhlo_to_version_downgrade.0_Y_0.mlir
的测试文件,以表明操作可以成功降级。
如果您的操作具有默认属性,请添加测试来证明默认属性已正确序列化和反序列化。
4. 添加了版本化序列化测试
将测试添加到 stablehlo_legalize_to_vhlo.mlir
后,请将具有最大版本的带版本号的测试文件复制到新版本的新文件中,并将新测试也添加到该文件中。您还需要使用 stablehlo-translate
创建关联的字节码文件:
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