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:
@ -90,6 +90,48 @@ SSOT(Single 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 @@ SSOT(Single 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 型定義・自動変換実装
|
||||
|
||||
Reference in New Issue
Block a user