docs(phi): Phase 25.1 - LoopForm v2 コメント整備 + ケース表完成
- ✅ [LoopForm] タグで統一コメント追加 - src/mir/loop_builder.rs - header-cond: Case A/B分岐説明 - exit-break path / continue-backedge path - exit PHI for Case A/B - src/mir/phi_core/loop_snapshot_merge.rs - Case A/B分岐: header ∈ exit_preds判定ロジック - src/mir/phi_core/exit_phi_builder.rs - LoopForm Process ステップバイステップ説明 - ✅ UsingCollectorBox Region+next_i化 - lang/src/compiler/parser/using/using_collector_box.hako - 全ループをLoopForm v2形式に統一 - next_i, next_j, next_k, next_t パターン導入 - SSA安全化(未定義変数撲滅) - ✅ LoopForm v2 ケース表完成 - docs/development/architecture/loops/loopform_ssot.md - Case A/B/C/D の完全な表 - テスト対応マッピング - 実装ファイル対応表 🎯 成果: LoopForm v2の「形」をソース・テスト・ドキュメントで完全固定
This commit is contained in:
@ -27,7 +27,58 @@ SSOT(Single Source of Truth)
|
||||
- Bridge 側に `LoopPhiOps` 実装を追加し、`prepare/seal/exit` を直接呼ぶ。
|
||||
- ループ形状の生成をユーティリティ化(builder/bridge 双方から共通呼び出し)。
|
||||
|
||||
---
|
||||
|
||||
## LoopForm v2 ケース表
|
||||
|
||||
| Case | loop 条件形 | exit preds の構成 | 想定される PHI 入力の形 | 対応テスト | 対応 .hako |
|
||||
|------|-----------|-----------------|---------------------|----------|-----------|
|
||||
| **A** | `loop(i < n)` | header / body | header fallthrough + break | `loop_conditional_reassign_exit_phi_header_and_break` | - |
|
||||
| **B** | `loop(1 == 1)` | body のみ | break のみ | `loop_constant_true_exit_phi_dominates` | `apps/tests/minimal_ssa_skip_ws.hako` |
|
||||
| **C** | `loop(1 == 1)` + body-local | body のみ(一部の経路のみ定義) | break のみ(BodyLocalInternal は除外) | `loop_body_local_exit_phi_body_only` | - |
|
||||
| **D** | `loop(i < n)` + continue | header / body / continue_merge | header + break + continue_merge | `loop_continue_merge_header_exit` | - |
|
||||
|
||||
### ケース説明
|
||||
|
||||
#### Case A: header+break(標準パターン)
|
||||
- **条件**: `loop(i < n)` のような動的条件
|
||||
- **特徴**: header→exit と body→exit の両方が CFG 上存在
|
||||
- **exit PHI**: header fallthrough + break 経路の両方を含む
|
||||
- **検証**: `loop_conditional_reassign_exit_phi_header_and_break`
|
||||
|
||||
#### Case B: constant-true+break-only(header 除外パターン)
|
||||
- **条件**: `loop(1 == 1)` のような定数 true
|
||||
- **特徴**: exit pred は break 経路のみ(`header→exit` は無い)
|
||||
- **exit PHI**: break 経路のみ(header は CFG predecessor でないため除外)
|
||||
- **検証**: `loop_constant_true_exit_phi_dominates` + `minimal_ssa_skip_ws.hako`
|
||||
|
||||
#### Case C: body-local変数(BodyLocalInternal 除外パターン)
|
||||
- **条件**: body 内で宣言された変数が一部の exit 経路でのみ定義される
|
||||
- **特徴**: 変数が全 exit predecessors で定義されていない
|
||||
- **exit PHI**: BodyLocalInternal 変数は除外(PHI 生成しない)
|
||||
- **検証**: `loop_body_local_exit_phi_body_only`
|
||||
|
||||
#### Case D: continue+break(continue_merge パターン)
|
||||
- **条件**: continue 文を含むループ
|
||||
- **特徴**: `continue_merge → header → exit` の経路あり
|
||||
- **exit PHI**: header + break + continue_merge の 3 系統
|
||||
- **検証**: `loop_continue_merge_header_exit`
|
||||
|
||||
### 実装ファイル
|
||||
|
||||
| ファイル | 役割 |
|
||||
|---------|-----|
|
||||
| `src/mir/loop_builder.rs` | ループ構造生成・[LoopForm] コメント付き |
|
||||
| `src/mir/phi_core/loop_snapshot_merge.rs` | Case A/B 分岐ロジック |
|
||||
| `src/mir/phi_core/exit_phi_builder.rs` | Exit PHI 生成・Phantom block 除外 |
|
||||
| `src/tests/mir_loopform_conditional_reassign.rs` | 4 ケース全てのテスト([LoopForm-Test] タグ付き) |
|
||||
|
||||
---
|
||||
|
||||
関連
|
||||
- `src/mir/loop_builder.rs`
|
||||
- `src/runner/json_v0_bridge/lowering/loop_.rs`
|
||||
- `src/mir/phi_core/common.rs`
|
||||
- `src/mir/phi_core/loop_snapshot_merge.rs`
|
||||
- `src/mir/phi_core/exit_phi_builder.rs`
|
||||
- `src/tests/mir_loopform_conditional_reassign.rs`
|
||||
|
||||
Reference in New Issue
Block a user