You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: backlog/tasks/task-42 - Specializer-M-interp-closure-compiled-IR-interpreter-the-oracle-backend.md
+11-5Lines changed: 11 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ title: 'Specializer M-interp: closure-compiled IR interpreter (the oracle backen
4
4
status: In Progress
5
5
assignee: []
6
6
created_date: '2026-07-25 02:31'
7
-
updated_date: '2026-07-25 18:42'
7
+
updated_date: '2026-07-25 19:18'
8
8
labels: []
9
9
milestone: m-7
10
10
dependencies:
@@ -23,10 +23,10 @@ Implement the interpreter backend over the imperative IR (design doc §7): one p
23
23
24
24
## Acceptance Criteria
25
25
<!-- AC:BEGIN -->
26
-
-[]#1 Every IR instruction executes; the M-ir fixture programs all produce expected outputs
27
-
-[]#2 Runs only verifier-accepted IR; rejects unverified programs
28
-
-[]#3 No allocation during execution (arena-only for varlen), asserted by a test
29
-
-[]#4 mise gate-specializer green
26
+
-[x]#1 Every IR instruction executes; the M-ir fixture programs all produce expected outputs
27
+
-[x]#2 Runs only verifier-accepted IR; rejects unverified programs
28
+
-[x]#3 No allocation during execution (arena-only for varlen), asserted by a test
29
+
-[x]#4 mise gate-specializer green
30
30
<!-- AC:END -->
31
31
32
32
## Implementation Plan
@@ -38,3 +38,9 @@ Implement the interpreter backend over the imperative IR (design doc §7): one p
38
38
4. Tests: all 5 M-ir fixtures executed against hand-computed inputs/statics/outputs; unverified-program rejection; counting global allocator asserts zero heap allocs on a warmed second run (arena/regs/builders reused); executor fuzz over gen::gen_program seeds with random inputs (no panics, |out| <= |in|, deterministic).
Implemented in src/specializer/exec/ (mod.rs substrate + interp.rs + tests.rs). compile() verifies first; closures built in one pre-traversal; terminators interpreted as a small enum in the row loop; register slots densely remapped at compile. Semantics pins documented and every one tested. Adversarial pass (6 agents) found and I fixed: u32 arena-span wrap silently corrupting output past 4 GiB (offsets now usize), store.opt false-flag storing the live register instead of the pinned type default, unvalidated validity-lane length, sparse value ids inflating the register frame, and an overbroad zero-allocation claim (restated: warmth is per content profile, growth one-time+monotone). RunState.emitted added. cargo 65 tests; alloc-free steady state asserted via thread-local counting global allocator; 150-seed executor fuzz deterministic.
0 commit comments