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 に、新旧の op バージョン間の変換を追加
- 新しいタイプまたは属性の場合:
- VhloTypes.td にタイプを追加するか、VhloAttrs.td に属性を追加します。
- StablehloLegalizeToVhlo.cpp に StableHLO → VHLO 変換を追加
- VhloLegalizeToStablehlo.cpp に VHLO → StableHLO 変換を追加
3. 単体テストを追加 / 更新する
互換性のない変更を行う場合、その機能の単体テストとネガティブな単体テストに加え、互換性単体テストについて責任を負います。
互換性単体テストでは、stablehlo_legalize_to_vhlo.mlir を更新して、最新バージョンの VHLO との StableHLO ラウンドトリップを確実に行うとともに、必要な上位互換性テストまたは下位互換性テストを追加します。たとえば、Y = X - 1
でバージョン X
に新しいオペレーションを追加する場合は、バージョン X
より前にオペレーションがサポートされていないことを示す vhlo_to_version_downgrade_invalid.0_Y_0.mlir
などのテストファイルを追加します。オペレーションの新しいバージョンを追加する場合は、オペレーションを正常にダウングレードできることを示す 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