docs(loopform): PHI/Loop箱→JoinIR移行対応表追加

実装内容:
- loopform_ssot.md に Phase 26-H 以降の移行戦略追加
- 全17箱の将来的な扱いを3カテゴリに分類:
  🔄 JoinIR に吸収(6箱): Header/Exit/Snapshot系
   削除候補(4箱): PhiBuilder/IfPhi/LoopPhi系
   残す(7箱): 前処理/検証/ユーティリティ系

移行戦略:
- Phase 27: 一般化 MIR → JoinIR 変換実装
- Phase 28: JoinIR 実行器実装(VM/LLVM)
- Phase 29: レガシー PHI 箱の段階的削除

これで「今の箱が最終的にどう片付くか」一目瞭然!🎉
This commit is contained in:
nyash-codex
2025-11-23 04:52:37 +09:00
parent e3c6ecb4e2
commit 9a5cec394c

View File

@ -90,6 +90,48 @@ SSOTSingle Source of Truth
---
## Phase 26-H 以降: PHI/Loop 箱 → JoinIR 移行対応表
JoinIR関数正規化IRの導入により、φ ードが関数引数に、merge ブロックが join 関数に変換される。各箱の将来的な扱いを整理する。
| 現在の箱 | ファイル | Phase | 将来的な扱い | 理由 |
|---------|---------|-------|------------|------|
| **HeaderPhiBuilder** | `header_phi_builder.rs` | 26-C | 🔄 JoinIR に吸収 | header φ → `loop_step` 関数の引数に変換 |
| **ExitPhiBuilder** | `exit_phi_builder.rs` | 26-D | 🔄 JoinIR に吸収 | exit φ → `k_exit` 継続の引数に変換 |
| **LoopSnapshotManager** | `loop_snapshot_manager.rs` | 26-C | 🔄 JoinIR に吸収 | スナップショット → 関数呼び出し時の引数に統合 |
| **LoopSnapshotMerge** | `loop_snapshot_merge.rs` | 26-C | 🔄 JoinIR に吸収 | スナップショット合流 → 関数呼び出しで自然に表現 |
| **PhiInputCollector** | `phi_input_collector.rs` | 26-B | 🔄 JoinIR に吸収 | φ 入力収集 → 関数引数決定ロジックに統合 |
| **IfBodyLocalMerge** | `if_body_local_merge.rs` | 26-F-2 | 🔄 JoinIR に吸収 | if merge φ → join 関数の引数に変換 |
| **PhiBuilderBox** | `phi_builder_box.rs` | 26-E | ❌ 削除候補 | 統一箱は JoinIR 生成で不要に |
| **IfPhi** | `if_phi.rs` | Phase 1 | ❌ 削除候補 | if φ → join 関数に完全統合 |
| **LoopPhi** | `loop_phi.rs` | Phase 1 | ❌ 削除候補 | loop φ → 関数引数に完全統合 |
| **LoopFormBuilder** | `loopform_builder.rs` | Phase 1 | ❌ 削除候補 | JoinIR 生成ロジックに置き換え |
| **LoopVarClassifier** | `loop_var_classifier.rs` | Option C | ✅ LoopForm 前段として残す | 変数分類は MIR → JoinIR 変換の前処理として必要 |
| **LoopExitLiveness** | `loop_exit_liveness.rs` | 26-F-4 | ✅ LoopForm 前段として残す | exit 後使用変数は `k_exit` 引数決定に必要 |
| **BodyLocalPhiBuilder** | `body_local_phi_builder.rs` | 26-B | ✅ LoopForm 前段として残す | 前処理段階での統合決定ロジック |
| **LocalScopeInspector** | `local_scope_inspector.rs` | Option C | ✅ LoopForm 前段として残す | スコープ分析は前処理として必要 |
| **PhiInvariants** | `phi_invariants.rs` | 26-F-3 | ✅ 検証用として残す | JoinIR 変換前後の検証に有用 |
| **Common** | `common.rs` | Phase 1 | ✅ ユーティリティとして残す | 共通ヘルパー関数群 |
| **Conservative** | `conservative.rs` | Phase 1 | ✅ フォールバックとして残す | 保守的 PHI 生成(レガシー互換) |
### 記号説明
- 🔄 **JoinIR に吸収**: φ ノード → 関数引数変換により不要になる
-**削除候補**: JoinIR 生成ロジックで完全に置き換えられる
-**残す**: MIR → JoinIR 変換の前処理/検証として必要
### 移行戦略Phase 27 以降)
1. **Phase 27**: 一般化 MIR → JoinIR 変換実装
- `lower_min_loop_to_joinir` の一般化
- LoopVarClassifier / LoopExitLiveness を前処理として利用
2. **Phase 28**: JoinIR 実行器実装VM / LLVM
- 関数呼び出し/継続ベースの実行
3. **Phase 29**: レガシー PHI 箱の段階的削除
- HeaderPhiBuilder → JoinIR 引数生成に置き換え
- ExitPhiBuilder → JoinIR 継続引数に置き換え
- PhiBuilderBox / IfPhi / LoopPhi の完全削除
---
関連
- `src/mir/loop_builder.rs`
- `src/runner/json_v0_bridge/lowering/loop_.rs`
@ -97,3 +139,4 @@ SSOTSingle Source of Truth
- `src/mir/phi_core/loop_snapshot_merge.rs`
- `src/mir/phi_core/exit_phi_builder.rs`
- `src/tests/mir_loopform_conditional_reassign.rs`
- **Phase 26-H**: `src/mir/join_ir.rs` - JoinIR 型定義・自動変換実装