Pour en savoir plus sur le VHLO, consultez vhlo.md
.
Contribution de modifications incompatibles
Toutes les modifications ayant des implications en termes de compatibilité doivent passer par le processus RFC. Par exemple, vous pouvez ajouter, rendre obsolète ou renommer un élément géographique. Une fois que le RFC est vous devez effectuer les étapes suivantes:
1. Déplacer le numéro de version dans Version.h et mettre à jour le journal des versions
Avant de mettre à jour les opérations VHLO, les attributs, les types ou les conversions, augmentez le numéro de version mineure dans le fichier Version.h ; et mettez à jour le journal des versions dans VhloDialect.td.
Toutes les nouvelles fonctionnalités VHLO ajoutées utiliseront cette version rechargée, par exemple après
renversant 0.10.0 --> 0.11.0
, une nouvelle opération dans VhloOps.td
utiliseriez:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Ajouter l'implémentation VHLO et les conversions requises
Le code exact nécessaire à l'intégration d'une nouvelle fonctionnalité varie, mais vous devez modifier l'une des parties suivantes:
- Pour les nouvelles opérations:
<ph type="x-smartling-placeholder">
- </ph>
- Ajoutez l'opération dans VhloOps.td.
- Ajoutez la conversion StableHLO → VHLO dans le fichier StablehloLegalizeToVhlo.cpp.
- Ajoutez la conversion VHLO → StableHLO dans VhloLegalizeToStablehlo.cpp.
- Pour les nouvelles versions des opérations existantes:
<ph type="x-smartling-placeholder">
- </ph>
- Ajoutez l'opération dans VhloOps.td.
- Mise à jour du mappage StableHLO vers VHLO dans le fichier MapStablehloToVhlo.h
- Ajoutez une conversion entre la nouvelle et l'ancienne version d'opération dans le fichier VhloToVersion.cpp.
- Pour les nouveaux types ou attributs:
<ph type="x-smartling-placeholder">
- </ph>
- 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 à la fois des éléments positifs et des tests unitaires négatifs de la fonctionnalité et des tests unitaires de compatibilité.
Les tests unitaires de compatibilité impliquent la mise à jour du fichier stablehlo_legalize_to_vhlo.mlir.
pour garantir que les allers-retours StableHLO avec la dernière version de VHLO
car tout autre test de compatibilité ascendant ou ascendante requis. Par exemple :
si vous ajoutez une nouvelle opération à la version X
avec Y = X - 1
, ajoutez un fichier de test comme
vhlo_to_version_downgrade_invalid.0_Y_0.mlir
indiquant 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 comme
vhlo_to_version_downgrade.0_Y_0.mlir
indiquant 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 sont correctement sérialisées et désérialisées.
4. Ajouter un test de sérialisation avec gestion des versions
Après avoir ajouté des tests à stablehlo_legalize_to_vhlo.mlir
, copiez le test avec gestion des versions
fichier contenant la version la plus volumineuse dans un nouveau fichier de la nouvelle version, puis ajoutez le paramètre
de nouveaux tests sur ce fichier. Vous devez également créer un bucket
bytecode à 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