Code Generation

Backends and lowering: Cranelift, native, LLVM, GPU, and debug info.

Code Generation

A geracao de codigo e o ponto em que Sounio mostra mais claramente que existem multiplos perfis reais de compilador. A descricao correta nao e mais “o artefato padrao expoe um unico caminho”, mas sim “o repositorio publica artefatos versionados separados para JIT e GPU, e cada um expoe um contrato de backend diferente”.

Mapa atual do codigo-fonte

  • self-hosted/native/ cobre lowering nativo, codificacao, ABI, alocacao de registradores e formatos de objeto.
  • self-hosted/wasm/ cobre lowering, codificacao e construcao de modulos para WASM.
  • self-hosted/gpu/ cobre PTX, SPIR-V, Metal, trabalho tensorial e lowering GPU.
  • self-hosted/llvm/ continua presente como subarvore orientada a LLVM.

O que os artefatos versionados provam

  • Perfil JIT: Cranelift JIT habilitado; LLVM e GPU codegen desabilitados.
  • Perfil GPU: GPU codegen habilitado; JIT desabilitado; emissao PTX disponivel via build --backend gpu.
  • A documentacao deve distinguir comportamento do perfil padrao, comportamento do perfil GPU e amplitude de implementacao no source tree.

Faixa nativa preview v2

O repositorio agora tambem carrega uma faixa preview publica native-v2 para o programa de soberania do backend. O alias de compatibilidade native-v2-shadow ja foi aposentado. Isso nao e um novo backend estavel para usuarios finais.

  • Ela existe para fixar RuntimeContext, politica de registradores por alvo e expectativas de Machine IR em um artefato legivel por maquina.
  • A faixa preview atual de x86-64 agora baixa por um caminho real de Machine IR + legalizacao, emite ELFs nativos scalar_core na shell self-hosted, publica gc_state e tabela de descritores de objetos gerenciados via RuntimeContext, roteia objetos heap do native-v2 por uma tabela fixa de handles para acesso alloc/field/index`, carrega um modelo executavel de GC mark-compact orientado por descritores com varredura precisa e regras de pin, e faz familias de opcode fora desse subconjunto falharem de forma fechada.
  • AArch64 ja aparece no contrato como politica definida, mas ainda nao foi promovido como emissor nativo publicado.

Confirmar o conjunto ativo de backends

export SOUC_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-jit"
"$SOUC_BIN" info

export SOUC_GPU_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-gpu"
"$SOUC_GPU_BIN" info
"$SOUC_GPU_BIN" build examples/kernel_vec_add.sio --backend gpu -o /tmp/kernel_vec_add.ptx

export SOUNIO_NATIVE_V2_CONTRACT_PATH=/tmp/native_backend_v2_contract.v1.json
"$SOUC_BIN" run self-hosted/compiler/main.sio -- --self-test

O artefato canonico protegido por gate e artifacts/omega/native_backend_v2_contract.v1.json.

Como escrever docs de codegen sem envelhecer

  • Descreva os diretorios de backend ao falar de arquitetura de implementacao.
  • Descreva o artefato JIT versionado ao falar da experiencia publica padrao.
  • Descreva o artefato GPU versionado ao falar de codegen GPU publico.
  • So documente caminhos de execucao de backend que voce validou com o artefato e o comando exatos.