Consulta vhlo.md
para obtener información sobre VHLO.
Cómo enviar cambios incompatibles
Todos los cambios con implicaciones de compatibilidad deben pasar por el proceso de RFC. Esto incluye agregar, dar de baja o cambiar el nombre de una función. Una vez que se apruebe la RFC, se deben completar los siguientes pasos:
1. Actualiza el número de versión en Version.h y el registro de versiones
Antes de actualizar las operaciones, los atributos, los tipos o las conversiones de VHLO, incrementa el número de versión secundario en Version.h y actualiza el registro de versión en VhloDialect.td.
Cualquier función VHLO nueva que se agregue usaría esta versión actualizada. Por ejemplo, después de actualizar 0.10.0 --> 0.11.0
, una operación nueva en VhloOps.td usaría lo siguiente:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Agregar la implementación y las conversiones de VHLO requeridas
El código exacto necesario para integrar una función nueva variará, pero, en su mayoría, se deberá cambiar lo siguiente:
- Para operaciones nuevas:
- Agrega la op en VhloOps.td
- Se agregó la conversión de StableHLO a VHLO en StablehloLegalizeToVhlo.cpp.
- Se agregó la conversión de VHLO → StableHLO en VhloLegalizeToStablehlo.cpp
- Para versiones nuevas de operaciones existentes, haz lo siguiente:
- Agrega la op en VhloOps.td
- Se actualizó la asignación de StableHLO a VHLO en MapStablehloToVhlo.h.
- Agrega una conversión entre las versiones de operaciones nuevas y antiguas en VhloToVersion.cpp
- Para tipos o atributos nuevos:
- Agrega el tipo en VhloTypes.td o el atributo en VhloAttrs.td.
- Se agregó la conversión de StableHLO a VHLO en StablehloLegalizeToVhlo.cpp.
- Se agregó la conversión de VHLO a StableHLO en VhloLegalizeToStablehlo.cpp.
3. Agregar o actualizar pruebas de unidades
El colaborador de un cambio incompatible es responsable de las pruebas de unidades positivas y negativas de la función, así como de las pruebas de unidades de compatibilidad.
Las pruebas de unidades de compatibilidad implican actualizar stablehlo_legalize_to_vhlo.mlir para garantizar que StableHLO realice viajes de ida y vuelta con la versión más reciente de VHLO, así como cualquier prueba de retrocompatibilidad o compatibilidad con versiones posteriores que se requiera. Por ejemplo, si agregas una operación nueva en la versión X
con Y = X - 1
, agrega un archivo de prueba como vhlo_to_version_downgrade_invalid.0_Y_0.mlir
que muestre que la operación no es compatible antes de la versión X
. Si agregas una versión nueva de una operación, agrega un archivo de prueba como
vhlo_to_version_downgrade.0_Y_0.mlir
, que muestre que la operación se puede cambiar a una versión inferior
correctamente.
Si tu operación tiene atributos predeterminados, incluye pruebas que muestren que los valores predeterminados se serializan y deserializan correctamente.
4. Se agregó la prueba de serialización con versión
Después de agregar pruebas a stablehlo_legalize_to_vhlo.mlir
, copia el archivo de prueba con versión con la versión más reciente en un archivo nuevo en la versión nueva y agrega las pruebas nuevas a ese archivo también. También deberás crear un archivo de bytecode asociado con 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