2.8 KiB
2.8 KiB
18.2. Backend Workshop 2 - LowerToVM and IRVM Contract
Status: Active (Draft)
Purpose
Definir o contrato intermediário IRVM e as regras normativas de lowering IRBackend -> IRVM, garantindo que a emissão de bytecode seja mecânica e determinística.
Context
- O runtime já define ISA e calling rules concretas.
- No runtime atual, jumps usam imediato
u32absoluto relativo ao início da função. - O verificador e o loader já têm validações rígidas que devem ser antecipadas pelo backend sempre que possível.
Decisions to Produce
- Modelo oficial de
IRVM:- unidades (módulo/função/bloco),
- instruções VM-like,
- referência a constantes/globais/locals/callables,
- metadados mínimos por função.
- Regras de lowering para controle de fluxo:
- labels simbólicos,
- normalização de blocos,
- política de branch/jump target.
- Regras de lowering para chamadas:
CALL,HOSTCALLpré-load,INTRINSICVM-owned.
- Regras de layout de função e slots:
param_slots,local_slots,return_slots.
- Política de diagnósticos determinísticos no lowering para rejeições backend-originadas.
Core Questions
IRVMpermite pseudo-opcodes que não existem na ISA final?- Onde ocorre a resolução final de labels para offsets: no próprio lowering ou apenas no emitter?
- Como garantir que cada função tenha finalização válida (
RET/terminador) sem depender só do verificador? - Qual o limite de checagens estáticas no compiler vs checagens delegadas ao verifier do runtime?
- Como representar efeitos de stack no
IRVMpara detectar underflow/mismatch antes de emitir bytes? - Como versionar
IRVMem relação à linha de ISA do runtime selecionada?
Expected Spec Material
- Nova spec:
IRBackend -> IRVMlowering contract. - Nova spec:
IRVMmodel e invariantes. - Tabela de mapeamento
IRVM op -> ISA oppor linha de runtime suportada. - Critérios de testes unitários do
LowerToVMPipelineStage.
Non-Goals
- Implementar ainda otimizações avançadas.
- Expandir ISA com novos opcodes.
- Resolver políticas de linking multi-artifact além do necessário para execução v1.
- Definir packer/cart assembly.
Inputs
prometeu-compiler/prometeu-build-pipeline/src/main/java/p/studio/compiler/workspaces/stages/LowerToVMPipelineStage.java../runtime/docs/runtime/virtual-machine/ISA_CORE.md../runtime/docs/runtime/specs/02-vm-instruction-set.md../runtime/docs/runtime/specs/02a-vm-values-and-calling-convention.md../runtime/crates/console/prometeu-bytecode/src/opcode.rs../runtime/crates/console/prometeu-bytecode/src/opcode_spec.rs../runtime/crates/console/prometeu-bytecode/src/decoder.rs../runtime/crates/console/prometeu-vm/src/verifier.rs