fix(mir): conservative PHI box for If/Loop and Stage1 resolver SSA
This commit is contained in:
@ -96,3 +96,20 @@ Status: planning(構造バグ切り出しフェーズ・挙動は変えない
|
||||
- 小さいテストを書く → verifier で赤を出す → LoopBuilder / IfForm / MirBuilder を直す → 緑になるまで繰り返す。
|
||||
- これにより、Stage‑B / Stage‑1 / selfhost の土台となる Rust MIR 層が安定し、その上に Nyash selfhost 側の MirBuilder を載せやすくする。
|
||||
- なお、Stage‑B 最小ハーネス(`stageb_min_sample.hako`)については、Rust MIR builder 経由の直接 VM / MIR verify は既に緑であり、残っている stack overflow は `compiler_stageb.hako` 側の Nyash ボックス連鎖に起因するものと考えられる。Rust 層では `emit_unified_call` / BoxCall / legacy 警戒の再入防止フラグと再帰深度カウンタを導入済みであり、以降は Nyash 側に浅い再帰ガードを置いて原因ボックスを特定するフェーズへ引き継ぐ。
|
||||
|
||||
### 実績メモ(Conservative PHI Box 完了)
|
||||
|
||||
- IfForm / LoopForm v2 の PHI 生成は「Conservative PHI Box」実装により根治済み:
|
||||
- If については `merge_modified_vars`(`src/mir/builder/phi.rs`)が **全変数の union に対して PHI を張る保守的実装**に切り替わり、
|
||||
- 片側の branch でしか定義されない変数(`then` のみ / `else` のみ)についても、
|
||||
- pre_if スナップショットまたは `const void` を使った安全な SSA 定義に統一。
|
||||
- Loop については LoopForm v2(`LoopFormBuilder`)側で header/exit PHI の扱いを整理し、
|
||||
- Carrier / Pinned / Invariant に分離したうえで exit PHI から `variable_map` を一貫して再束縛する構造に寄せた。
|
||||
- Box 理論の観点では:
|
||||
- Conservative Box: まず「安全側」に全変数に PHI を張る(正しさ優先)。
|
||||
- Elimination Box: 将来の最適化フェーズで、使われない PHI を削る(効率最適化)。
|
||||
- この Conservative PHI 実装により、Stage‑1 using resolver 一式の代表テスト:
|
||||
- `mir_parserbox_parse_program2_harness_parses_minimal_source`
|
||||
- `mir_stage1_using_resolver_min_fragment_verifies`
|
||||
- `mir_stage1_using_resolver_full_collect_entries_verifies`
|
||||
がすべて緑になっており、「片側 branch だけで定義された変数の non‑dominating use」系のバグは Rust 側では止血済み。***
|
||||
|
||||
Reference in New Issue
Block a user