prometeu-studio/docs/pbs/agendas/18.2. Backend Workshop 2 - LowerToVM and IRVM Contract.md

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 u32 absoluto 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

  1. 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.
  2. Regras de lowering para controle de fluxo:
    • labels simbólicos,
    • normalização de blocos,
    • política de branch/jump target.
  3. Regras de lowering para chamadas:
    • CALL,
    • HOSTCALL pré-load,
    • INTRINSIC VM-owned.
  4. Regras de layout de função e slots:
    • param_slots,
    • local_slots,
    • return_slots.
  5. Política de diagnósticos determinísticos no lowering para rejeições backend-originadas.

Core Questions

  1. IRVM permite pseudo-opcodes que não existem na ISA final?
  2. Onde ocorre a resolução final de labels para offsets: no próprio lowering ou apenas no emitter?
  3. Como garantir que cada função tenha finalização válida (RET/terminador) sem depender só do verificador?
  4. Qual o limite de checagens estáticas no compiler vs checagens delegadas ao verifier do runtime?
  5. Como representar efeitos de stack no IRVM para detectar underflow/mismatch antes de emitir bytes?
  6. Como versionar IRVM em relação à linha de ISA do runtime selecionada?

Expected Spec Material

  1. Nova spec: IRBackend -> IRVM lowering contract.
  2. Nova spec: IRVM model e invariantes.
  3. Tabela de mapeamento IRVM op -> ISA op por linha de runtime suportada.
  4. 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