如需了解 VHLO,请参阅 vhlo.md
。
促成不兼容的更改
所有会产生兼容性影响的更改都必须通过 RFC 流程。 包括添加、弃用或重命名功能。启用 RFC 后 必须完成以下步骤:
1. 提高 Version.h 中的版本号并更新版本日志
在更新 VHLO 操作、属性、类型或转化之前,将 Version.h 中的次要版本号, 并更新 VhloDialect.td 中的版本日志
任何新增的 VHLO 功能都将使用此提升版本,例如
递增 VhloOps.td 中的新操作 0.10.0 --> 0.11.0
将使用:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. 添加必需的 VHLO 实现和转换
集成新功能所需的具体代码会有所不同,但对于大多数 以下部分需要更改:
- 对于新操作:
<ph type="x-smartling-placeholder">
- </ph>
- 在 VhloOps.td 中添加操作
- 在 StablehloLegalizeToVhlo.cpp 中添加 StableHLO → VHLO 转换
- 在 VhloLegalizeToStablehlo.cpp 中添加 VHLO → StableHLO 转换
- 对于现有操作的新版本:
<ph type="x-smartling-placeholder">
- </ph>
- 在 VhloOps.td 中添加操作
- 在 MapStablehloToVhlo.h 中将 StableHLO 更新为 VHLO 映射
- 在 VhloToVersion.cpp 中添加新旧版本操作之间的转换
- 对于新类型或属性:
<ph type="x-smartling-placeholder">
- </ph>
- 在 VhloTypes.td 中添加类型 或 VhloAttrs.td 中的属性
- 在 StablehloLegalizeToVhlo.cpp 中添加 StableHLO → VHLO 转换
- 在 VhloLegalizeToStablehlo.cpp 中添加 VHLO → StableHLO 转换
3. 添加 / 更新单元测试
不兼容的更改的促成者有正面和 功能的负面单元测试,以及兼容性单元测试。
兼容性单元测试涉及更新 stablehlo_legalize_to_vhlo.mlir
确保 StableHLO 使用最新版 VHLO 进行往返,以及
与所需的任何其他向前或向后兼容性测试相同。例如:
如果在版本 X
中以 Y = X - 1
添加新操作,请添加类似如下的测试文件:
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