Lista de verificação da especificação do StableHLO

Neste documento, resumimos as diretrizes para analisar mudanças na especificação. No momento, essas mudanças geralmente envolvem a verificação de vários itens em fontes diferentes. Por isso, este documento resume todas elas para simplificar as análises:

  1. Verifique se a coluna "Specification" em status.md diz "yes". Se estiver adicionando uma nova op, adicione uma linha.
  2. Verifique se o título da seção corresponde à linguagem mnemônica da operação na ODS.
  3. Verifique se a seção "Semântica" corresponde à Semântica de operação do XLA.
  4. Verifique se as seções "Entradas" e "Saídas":
    1. Liste os mesmos itens do ODS.
    2. Liste os mesmos itens como HloInstruction::CreateFromProto.
    3. São ordenadas exatamente como ODS.
    4. Se houver inconsistências, verifique se há tíquetes correspondentes.
  5. Verifique se a seção "Restrições":
    1. Corresponde a shape_inference.cc do XLA.
    2. Corresponde ao hlo_verifier.cc do XLA.
    3. Corresponde à ODS.
    4. Corresponde a StablehloOps.cpp.
    5. Se houver inconsistências, verifique se há tíquetes correspondentes. Vincule todos os ingressos na especificação em locais o mais específicos possível (por exemplo, se um tíquete for sobre uma restrição que não foi implementada, vincule o ingresso diretamente nessa restrição).
    6. Se as partes correspondentes de ODS e StablehloOps.cpp corresponderem à especificação, confira se as colunas "Verificação" e "Inferência de tipo" em status.md mostram "sim".
  6. Confira se a seção "Exemplos":
    1. Tem apenas um exemplo. No futuro, incluiremos links para mais exemplos do pacote de testes de intérprete do StableHLO.
    2. usa uma sintaxe MLIR válida executando stablehlo-opt em exemplos de código;
    3. Usa uma sintaxe MLIR genérica, que pode ser recebida executando stablehlo-opt -mlir-print-op-generic. Mantemos a sintaxe genérica na especificação para evitar que ela seja alterada em mudanças no prettyprinter.
  7. Verifique se o description no ODS da operação:
    1. Inclui a primeira frase da especificação.
    2. Em seguida, leva à seção correspondente da especificação.
    3. Em seguida, usa o mesmo exemplo da especificação, mas usando uma sintaxe bela que pode ser recebida executando stablehlo-opt.
  8. Confira se os arquivos relacionados à implementação de restrições de verificação e inferência de tipo seguem as diretrizes mencionadas abaixo:
    1. Siga a diretriz no 1 para StablehloOps.td.
    2. Siga a diretriz 2 para TypeInference.cpp e StablehloOps.cpp.
    3. Siga a diretriz 5 para ops_stablehlo.mlir.
    4. Siga a diretriz no 6 para infer_stablehlo.mlir.
  9. Avalie a operação em relação a efeitos colaterais e especulabilidade.
    1. Se a operação não tiver efeitos colaterais e for sempre especulável, atribua a ela a característica Pure. Isso é raro, já que a maioria das operações permite formas dinâmicas, o que pode levar a incompatibilidades de formas no tempo de execução, que é um comportamento indefinido. Algumas operações também podem ter comportamento indefinido em outras situações. A grande maioria das operações não tem efeitos colaterais, e sim a característica NoMemoryEffect.
    2. A maioria das operações se enquadra em uma das características HLO_SpeculatableIf*. Se a operação não se encaixar em nenhum deles, atribua a ela a característica ConditionallySpeculatable e implemente os métodos de interface. Adicione testes a stablehlo/tests/ops_speculatability.mlir para abranger a lógica de especulação.