Consulte vhlo.md
para mais informações sobre o VHLO.
Contribuição de alterações incompatíveis
Todas as alterações com implicações de compatibilidade devem passar pelo processo de RFC. Isso inclui adicionar, descontinuar ou renomear um recurso. Depois que o RFC for aprovado, as etapas a seguir precisarão ser concluídas:
1. Aumentar o número da versão em Version.h e atualizar o registro de versão
Antes de atualizar operações, atributos, tipos ou conversões de VHLO, incremente o número da versão secundária em Version.h e atualize o registro da versão em VhloDialect.td.
Todos os novos recursos do VHLO adicionados usariam essa versão atualizada. Por exemplo, depois
de atualizar 0.10.0 --> 0.11.0
, uma nova operação em VhloOps.td
usaria:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Adicionar implementação e conversões obrigatórias de VHLO
O código exato necessário para integrar um novo recurso varia, mas na maior parte, o seguinte precisa mudar:
- Para novas operações:
- Adicione a operação em VhloOps.td.
- Adição da conversão StableHLO → VHLO em StablehloLegalizeToVhlo.cpp
- Adição da conversão VHLO → StableHLO em VhloLegalizeToStablehlo.cpp
- Para novas versões de operações existentes:
- Adicionar a operação em VhloOps.td
- Atualização do mapeamento de StableHLO para VHLO em MapStablehloToVhlo.h (link em inglês).
- Adicionar uma conversão entre as versões de operação novas e antigas em VhloToVersion.cpp
- Para novos tipos ou atributos:
- Adicione o tipo em VhloTypes.td ou o atributo em VhloAttrs.td
- Adição da conversão StableHLO → VHLO em StablehloLegalizeToVhlo.cpp.
- Adição da conversão VHLO → StableHLO em VhloLegalizeToStablehlo.cpp
3. Adicionar / atualizar testes de unidade
O colaborador de uma mudança incompatível é responsável pelos testes de unidade positivos e negativos do recurso, bem como pelos testes de unidade de compatibilidade.
O teste de unidade de compatibilidade envolve a atualização de stablehlo_legalize_to_vhlo.mlir
para garantir que o StableHLO faça viagens de ida e volta com a versão mais recente do VHLO, bem como
qualquer outro teste de compatibilidade futura ou revertida necessário. Por exemplo,
se você adicionar uma nova operação na versão X
com Y = X - 1
, adicione um arquivo de teste como
vhlo_to_version_downgrade_invalid.0_Y_0.mlir
, que mostra que a operação não tem suporte
antes da versão X
. Se você estiver adicionando uma nova versão de uma operação, adicione um arquivo de teste como
vhlo_to_version_downgrade.0_Y_0.mlir
, que mostra que a operação pode ser rebaixada
com sucesso.
Se a operação tiver atributos padrão, inclua testes que mostrem que os padrões são serializados e desserializados corretamente.
4. Adicionar teste de serialização versão
Depois de adicionar testes a stablehlo_legalize_to_vhlo.mlir
, copie o arquivo de teste com controle de versão
com a maior versão em um novo arquivo na nova versão e adicione os
novos testes a esse arquivo também. Você também vai precisar criar um arquivo de bytecode
associado usando 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