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, suspender o uso ou renomear um recurso. Assim que o RFC é aprovado, as seguintes etapas precisam ser concluídas:
1. Fazer bump no número da versão no Version.h e atualizar o registro da versão
Antes de atualizar operações, atributos, tipos ou conversões VHLO, incremente o o número da versão secundária em Version.h, e atualize o registro de versão em VhloDialect.td
Os novos recursos de VHLO adicionados usarão essa versão otimizada, por exemplo, após
subindo 0.10.0 --> 0.11.0
, uma nova operação em VhloOps.td
usaria:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Adição de conversões e implementação de VHLO obrigatórias
O código exato necessário para integrar um novo recurso varia. No entanto, para parte a seguir precisará ser alterada:
- Para novas operações:
- Adicione a operação em VhloOps.td.
- Adicione a 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:
- Adicione a operação em VhloOps.td.
- Atualização do mapeamento de StableHLO para VHLO em MapStablehloToVhlo.h (link em inglês).
- Adicione uma conversão entre as versões novas e antigas de operações em VhloToVersion.cpp.
- Para novos tipos ou atributos:
- Adicione o tipo em VhloTypes.td. ou o atributo em VhloAttrs.td
- Adicione a conversão StableHLO → VHLO em StablehloLegalizeToVhlo.cpp.
- Adição da conversão VHLO → StableHLO em VhloLegalizeToStablehlo.cpp
3. Adicionar / atualizar testes de unidade
O contribuidor de uma mudança incompatível é responsável por impactos positivos testes de unidade negativos do recurso, bem como testes de unidade de compatibilidade.
O teste de unidade de compatibilidade envolve a atualização de stablehlo_legalize_to_vhlo.mlir.
para garantir que as viagens de ida e volta do StableHLO com a versão mais recente do VHLO,
quaisquer testes adicionais de compatibilidade com versões anteriores ou posteriores necessárias. Por exemplo:
se estiver adicionando 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 é compatível
antes da versão X
. Se estiver adicionando uma nova versão de uma op, adicione um arquivo de teste como
vhlo_to_version_downgrade.0_Y_0.mlir
que mostra que é possível fazer downgrade da operação.
com sucesso.
Se a operação tiver atributos padrão, inclua testes que mostrem que os padrões são serializadas e desserializadas corretamente.
4. Adicionar teste de serialização versão
Depois de adicionar testes ao stablehlo_legalize_to_vhlo.mlir
, copie o teste com controle de versão
com a maior versão em um novo arquivo na nova versão e adicione o
novos testes para esse arquivo também. Você também precisará criar um
arquivo de bytecode 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