summaryrefslogtreecommitdiff
path: root/skills/chapter25-codex-notes.md
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-02 11:20:00 -0700
committerCliff Click <cliffc@acm.org>2026-10-02 11:20:00 -0700
commitd5352268a0a1355262eed78e3263c18486fb9d8a (patch)
treef28474bb1e4333867214834e6abdeea729be68c7 /skills/chapter25-codex-notes.md
parentbd0ef17d0f9563ed9579fe060b785211e8378006 (diff)
downloadSimple-d5352268a0a1355262eed78e3263c18486fb9d8a.tar.gz
Simple-d5352268a0a1355262eed78e3263c18486fb9d8a.zip
Fix bug loop tree depth on inf loops
Diffstat (limited to 'skills/chapter25-codex-notes.md')
-rw-r--r--skills/chapter25-codex-notes.md21
1 files changed, 19 insertions, 2 deletions
diff --git a/skills/chapter25-codex-notes.md b/skills/chapter25-codex-notes.md
index c409cd55..10729bf3 100644
--- a/skills/chapter25-codex-notes.md
+++ b/skills/chapter25-codex-notes.md
@@ -126,8 +126,25 @@ For shared viewer work, read [the graph viewer notes](graph-viewer-codex-notes.m
bank, preserving integer bits when allocated to XMM. ARM's emulator needs
MOVK and full MOVZ immediate/shift support. The 91-entry spill cohort changes
840 / 1,456 to 845 / 1,559; read-before-New ordering explains most of the
- RISC-V BrainFuck increase. No allocator heuristics changed. Synthetic scalar
- TOP exit allocation already failed before this port; see the pending queue.
+ RISC-V BrainFuck increase. No allocator heuristics changed in that port.
+
+- Synthetic never-exit TOP values remain in the graph for neutral type merges,
+ but have no runtime value to allocate. Chapters 20-25 exclude TOP definitions
+ and Phi arms from LRG construction, Phi-input liveness and spill copies; TOP
+ arms also do not contribute to spill loop-depth estimates. Register-bias walks
+ must stop at an input with no LRG. Do not give TOP a permissive register mask:
+ that still creates false liveness, interference and spills. Coalescing assumes
+ both ends of every actual copy have LRGs; fix the creation of bogus copies,
+ rather than adding a null guard there.
+
+- From Chapter 18, stop loop-tree discovery at each Return. Seed the function's
+ outer tree before the post-order body walk, since `forceExit` can add a return
+ Region and projections before the walk reaches the function entry. Those
+ exits inherit the function's outer tree; Never and the backedge projection
+ inherit the actual loop. Function bodies are depth 0, real loops add depth.
+ In Chapter 25, Stop/Start and StopCU/StartCU links describe external-world
+ type propagation, not executable loop backedges. Walking through them created
+ inconsistent depths and caused the RISC-V pointer-return spill-round failure.
- Chapter 21's Load search is separate from the one-step factoring guard.
It creates no nodes or rewiring, but records dependencies and returns folding