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-64agora baixa por um caminho real de Machine IR + legalizacao, emite ELFs nativosscalar_corena shell self-hosted, publicagc_statee tabela de descritores de objetos gerenciados viaRuntimeContext, roteia objetos heap do native-v2 por uma tabela fixa de handles para acessoalloc/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. AArch64ja 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.