pr 29
This commit is contained in:
parent
4f442f3123
commit
ceaac6cab8
@ -242,14 +242,15 @@ mod tests {
|
||||
006C GetLocal U32(1)
|
||||
0072 SetLocal U32(2)
|
||||
0078 Nop
|
||||
007A LoadRef U32(0)
|
||||
0080 SetLocal U32(3)
|
||||
0086 GetLocal U32(3)
|
||||
008C PushConst U32(5)
|
||||
0092 Add
|
||||
0094 SetLocal U32(4)
|
||||
009A Nop
|
||||
009C Ret
|
||||
007A GetLocal U32(2)
|
||||
0080 LoadRef U32(0)
|
||||
0086 SetLocal U32(3)
|
||||
008C GetLocal U32(3)
|
||||
0092 PushConst U32(5)
|
||||
0098 Add
|
||||
009A SetLocal U32(4)
|
||||
00A0 Nop
|
||||
00A2 Ret
|
||||
"#;
|
||||
|
||||
assert_eq!(disasm_text, expected_disasm);
|
||||
|
||||
@ -238,6 +238,8 @@ impl<'a> Lowerer<'a> {
|
||||
|
||||
// 3. Begin Operation
|
||||
self.emit(Instr::BeginPeek { gate: ValueId(gate_slot) });
|
||||
self.emit(Instr::GetLocal(gate_slot));
|
||||
self.emit(Instr::LoadRef(0));
|
||||
|
||||
// 4. Bind view to local
|
||||
self.local_vars.push(HashMap::new());
|
||||
@ -266,6 +268,8 @@ impl<'a> Lowerer<'a> {
|
||||
|
||||
// 3. Begin Operation
|
||||
self.emit(Instr::BeginBorrow { gate: ValueId(gate_slot) });
|
||||
self.emit(Instr::GetLocal(gate_slot));
|
||||
self.emit(Instr::LoadRef(0));
|
||||
|
||||
// 4. Bind view to local
|
||||
self.local_vars.push(HashMap::new());
|
||||
@ -294,6 +298,8 @@ impl<'a> Lowerer<'a> {
|
||||
|
||||
// 3. Begin Operation
|
||||
self.emit(Instr::BeginMutate { gate: ValueId(gate_slot) });
|
||||
self.emit(Instr::GetLocal(gate_slot));
|
||||
self.emit(Instr::LoadRef(0));
|
||||
|
||||
// 4. Bind view to local
|
||||
self.local_vars.push(HashMap::new());
|
||||
|
||||
@ -75,24 +75,15 @@ pub fn lower_function(core_func: &ir_core::Function) -> Result<ir_vm::Function>
|
||||
type_id: ir_vm::TypeId(ty.0),
|
||||
slots: *slots
|
||||
},
|
||||
ir_core::Instr::BeginPeek { .. } => {
|
||||
vm_func.body.push(ir_vm::Instruction::new(ir_vm::InstrKind::GateBeginPeek, None));
|
||||
ir_vm::InstrKind::GateLoad { offset: 0 }
|
||||
}
|
||||
ir_core::Instr::BeginBorrow { .. } => {
|
||||
vm_func.body.push(ir_vm::Instruction::new(ir_vm::InstrKind::GateBeginBorrow, None));
|
||||
ir_vm::InstrKind::GateLoad { offset: 0 }
|
||||
}
|
||||
ir_core::Instr::BeginMutate { .. } => {
|
||||
vm_func.body.push(ir_vm::Instruction::new(ir_vm::InstrKind::GateBeginMutate, None));
|
||||
ir_vm::InstrKind::GateLoad { offset: 0 }
|
||||
}
|
||||
ir_core::Instr::BeginPeek { .. } => ir_vm::InstrKind::GateBeginPeek,
|
||||
ir_core::Instr::BeginBorrow { .. } => ir_vm::InstrKind::GateBeginBorrow,
|
||||
ir_core::Instr::BeginMutate { .. } => ir_vm::InstrKind::GateBeginMutate,
|
||||
ir_core::Instr::EndPeek => ir_vm::InstrKind::GateEndPeek,
|
||||
ir_core::Instr::EndBorrow => ir_vm::InstrKind::GateEndBorrow,
|
||||
ir_core::Instr::EndMutate => ir_vm::InstrKind::GateEndMutate,
|
||||
ir_core::Instr::LoadRef(offset) => ir_vm::InstrKind::GateLoad { offset: *offset },
|
||||
ir_core::Instr::StoreRef(offset) => ir_vm::InstrKind::GateStore { offset: *offset },
|
||||
ir_core::Instr::Free => ir_vm::InstrKind::Nop,
|
||||
ir_core::Instr::Free => anyhow::bail!("Instruction 'Free' cannot be represented in ir_vm v0"),
|
||||
};
|
||||
vm_func.body.push(ir_vm::Instruction::new(kind, None));
|
||||
}
|
||||
|
||||
@ -1,35 +1,3 @@
|
||||
# PR-04 — Update `core_to_vm` Lowering (Kill Placeholders)
|
||||
|
||||
### Goal
|
||||
|
||||
Make lowering the **only** integration point between Core IR and VM IR.
|
||||
|
||||
### Required Mapping
|
||||
|
||||
* `ir_core::Alloc { ty, slots }`
|
||||
→ `ir_vm::Alloc { type_id, slots }`
|
||||
|
||||
* `BeginPeek / Borrow / Mutate`
|
||||
→ `GateBegin*`
|
||||
|
||||
* `EndPeek / Borrow / Mutate`
|
||||
→ `GateEnd*`
|
||||
|
||||
**Forbidden:**
|
||||
|
||||
* `LoadRef(0)`
|
||||
* `Nop` as semantic replacement
|
||||
|
||||
### Tests
|
||||
|
||||
* Given a Core IR program with alloc + begin/end, VM IR must contain:
|
||||
|
||||
* shape-explicit `Alloc`
|
||||
* correctly paired gate begin/end
|
||||
* zero placeholders
|
||||
|
||||
---
|
||||
|
||||
# PR-05 — Gate-Aware Access Path (Choose One, Explicitly)
|
||||
|
||||
### Goal
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user