Parents: #466, #469 Performance evidence: #473 Follows: #1014
Executed evidence
After #1014, the exact frozen representativeJson function builds a valid optimizer plan with 131 bytecodes, 11 CFG blocks, 147 live whole-function SSA nodes, 13 edges, and 3 branches. All loop-region lowerers reject before selection because graph.nodes.len > jit.numeric_scratch_capacity (147 > 128), even though native OSR executes only one selected natural-loop region and imports its live entry values from the VM frame.
Scope
- Select the exact natural loop before applying the native scratch-capacity gate.
- Compact only values required by that region, its internal/backedge copies, exact side exits, frame states, handlers, and runtime-operation recovery states into stable region-local SSA slots.
- Preserve original bytecode origins and CFG block identities for steps, diagnostics, side exits, and observability.
- Reject irreducible or external-entry regions before pruning any edge that would expose the defect.
- Keep all native scratch/deopt/stack-map indexes within the existing 128-slot ABI; do not enlarge the array to fit unrelated function nodes.
Acceptance
- A focused function with more than 128 live pre-loop SSA values but a small natural loop publishes and executes exact OSR.
- Entry imports, parallel edge copies, side-exit recovery, handlers, stack maps, invalidation, and moving-GC rewrites use the compact IDs.
- Existing irreducible-region rejection remains pinned.
- The exact
representativeJsonfunction advances past the 147/128 rejection; any next rejection is measured and filed separately. - Focused Debug, ReleaseFast, TSan, forced-tier semantic differential, and exact-parent timing remain green with no frozen-control regression.