Pour en savoir plus sur les VHLO, consultez vhlo.md
.
Contribuer à des modifications incompatibles
Toutes les modifications ayant des implications en termes de compatibilité doivent passer par le processus RFC. Cela inclut l'ajout, l'abandon ou le renommage d'une fonctionnalité. Une fois le document RFC approuvé, vous devez effectuer les étapes suivantes:
1. Modifier le numéro de version dans Version.h et mettre à jour le journal des versions
Avant de mettre à jour les opérations, les attributs, les types ou les conversions VHLO, incrémentez le numéro de version mineure dans Version.h et mettez à jour le journal de version dans VhloDialect.td.
Toutes les nouvelles fonctionnalités VHLO ajoutées utiliseraient cette version mise à jour. Par exemple, après avoir mis à jour 0.10.0 --> 0.11.0
, une nouvelle opération dans VhloOps.td utiliserait :
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Ajouter l'implémentation et les conversions VHLO requises
Le code exact nécessaire pour intégrer une nouvelle fonctionnalité varie, mais dans la plupart des cas, les éléments suivants doivent être modifiés :
- Pour les nouvelles opérations :
- Ajoutez l'opération dans VhloOps.td.
- Ajout de la conversion StableHLO → VHLO dans StablehloLegalizeToVhlo.cpp
- Ajoutez la conversion VHLO → StableHLO dans VhloLegalizeToStablehlo.cpp.
- Pour les nouvelles versions d'opérations existantes :
- Ajoutez l'opération dans VhloOps.td.
- Mise à jour du mappage StableHLO vers VHLO dans MapStablehloToVhlo.h
- Ajout d'une conversion entre les nouvelles et anciennes versions d'opérations dans VhloToVersion.cpp
- Pour les nouveaux types ou attributs :
- Ajoutez le type dans VhloTypes.td ou l'attribut dans VhloAttrs.td.
- Ajoutez la conversion StableHLO → VHLO dans le fichier StablehloLegalizeToVhlo.cpp.
- Ajoutez la conversion VHLO → StableHLO dans VhloLegalizeToStablehlo.cpp.
3. Ajouter/Mettre à jour des tests unitaires
Le contributeur d'une modification incompatible est responsable des tests unitaires positifs et négatifs de la fonctionnalité, ainsi que des tests unitaires de compatibilité.
Les tests unitaires de compatibilité impliquent de mettre à jour stablehlo_legalize_to_vhlo.mlir pour vous assurer que StableHLO fonctionne en aller-retour avec la dernière version de VHLO, ainsi que tous les tests de compatibilité avant ou arrière supplémentaires requis. Par exemple, si vous ajoutez une nouvelle opération à la version X
avec Y = X - 1
, ajoutez un fichier de test tel que vhlo_to_version_downgrade_invalid.0_Y_0.mlir
qui indique que l'opération n'est pas prise en charge avant la version X
. Si vous ajoutez une nouvelle version d'une opération, ajoutez un fichier de test tel que vhlo_to_version_downgrade.0_Y_0.mlir
qui montre que l'opération peut être rétrogradée avec succès.
Si votre opération possède des attributs par défaut, incluez les tests qui montrent que les valeurs par défaut sont sérialisées et désérialisées correctement.
4. Ajouter un test de sérialisation avec version
Après avoir ajouté des tests à stablehlo_legalize_to_vhlo.mlir
, copiez le fichier de test avec la version la plus élevée dans un nouveau fichier à la nouvelle version, puis ajoutez-y les nouveaux tests. Vous devez également créer un fichier de bytecode associé à l'aide de 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