feat(edgecfg): Phase 265 P1 - compose 配線ロジック実装(test-only PoC)

## 目的
Frag/ExitKind が BasicBlockId 層で配線できることを証明

## 実装完了内容
- EdgeStub に target: Option<BasicBlockId> 追加
- compose::loop_() 配線ロジック実装(Continue → header, Break → after)
- verify_frag_invariants() 配線契約検証追加
- test-only PoC で実証完了(5個のテスト)

## 配線契約
- Continue(loop_id) の EdgeStub.target = Some(header)
- Break(loop_id) の EdgeStub.target = Some(after)
- Normal/Return/Unwind の EdgeStub.target = None(上位へ伝搬)

## テスト
- compose::tests: 5 PASS(既存2個更新 + 新規3個追加)
- verify::tests: 1 PASS(基本smoke test)
- cargo test -p nyash-rust --lib: SUCCESS

## 重要な制約
- MIR 命令生成はまだしない(Frag 層の配線能力証明のみ)
- NormalizedShadow/JoinIR層への適用は Phase 266 に繰り越し
- Pattern6/7/8 未改変(配線能力の証明に集中)

## 次のステップ
- Phase 265 P2: seq/if_ 実装(順次合成・条件分岐合成)
- Phase 266: JoinIR-VM Bridge 改修後、NormalizedShadow への適用

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-21 16:22:46 +09:00
parent ab1510920c
commit cda034fe8f
6 changed files with 285 additions and 32 deletions

View File

@ -55,6 +55,31 @@
**詳細**: `docs/development/current/main/phases/phase-265/README.md`
## 2025-12-21Phase 265 P1compose 配線ロジック実装)✅
**目的**: Frag/ExitKind が BasicBlockId 層で配線できることを証明
**完了内容**:
- EdgeStub に `target: Option<BasicBlockId>` 追加
- compose::loop_() 配線ロジック実装Continue → header, Break → after
- verify_frag_invariants() 配線契約検証追加
- test-only PoC で実証完了5個のテスト: 既存2個更新 + 新規3個追加
**配線契約**:
- Continue(loop_id) の EdgeStub.target = Some(header)
- Break(loop_id) の EdgeStub.target = Some(after)
- Normal/Return/Unwind の EdgeStub.target = None上位へ伝搬
**重要**:
- MIR 命令生成はまだしないFrag 層の配線能力証明に集中)
- NormalizedShadow/JoinIR層への適用は Phase 266 に繰り越し(層境界を守る)
**次のステップ**:
- Phase 265 P2: seq/if_ 実装(順次合成・条件分岐合成)
- Phase 266: JoinIR-VM Bridge 改修後、NormalizedShadow への適用
**詳細**: `docs/development/current/main/phases/phase-265/README.md`
## Next (planned)
- Phase 265planned: Pattern8 を Frag 合成に移行し、ExitKind+Frag の実装適用を開始(`compose::loop_` 実装)

View File

@ -95,6 +95,22 @@ Related:
- 配線ロジックは P1 以降
- **次**: Phase 265 P1 で配線ロジック + Pattern8適用
- **Phase 265 P1✅ 完了): compose 配線ロジック実装**
- **目的**: Frag/ExitKind の配線能力を BasicBlockId 層で証明
- **実装**:
- EdgeStub.target 追加Option<BasicBlockId>
- compose::loop_() 配線ロジックContinue → header, Break → after
- verify_frag_invariants() 配線契約検証
- test-only PoC5個のテスト: 既存2個更新 + 新規3個追加
- **配線契約**:
- Continue(loop_id) の EdgeStub.target = Some(header)
- Break(loop_id) の EdgeStub.target = Some(after)
- Normal/Return/Unwind の EdgeStub.target = None上位へ伝搬
- **制約**:
- MIR 命令生成なしFrag 層のみ)
- NormalizedShadow 未適用Phase 266 に繰り越し)
- **次**: Phase 265 P2 で seq/if_ 実装
- **real-app loop regression の横展開VM + LLVM EXE**
- ねらい: 実コード由来ループを 1 本ずつ最小抽出して fixture/smoke で固定する(段階投入)。
- 現状: Phase 107find_balanced_array/object / json_cur 由来)まで固定済み。

View File

@ -143,6 +143,27 @@ Frag = { entry_block, exits: Map<ExitKind, Vec<EdgeStub>> }
- `verify_frag_invariants()`: 最小検証追加(デバッグガード付き)
- Pattern8適用: P0ではやらない偽Frag回避、P1から実戦投入
次フェーズ(Phase 265 P1+)で配線ロジック + Pattern8適用 + seq/if_ 実装へ。
現時点では既存 pattern6/7/8 や merge/EdgeCFG は未改変(入口だけ用意)。
**Phase 265 P1: 配線ロジック実装完了**
**目的**: Frag/ExitKind が BasicBlockId 層で配線できることを証明
**実装完了内容**:
- EdgeStub に `target: Option<BasicBlockId>` 追加
- compose::loop_() が Continue → header, Break → after への配線を実行
- verify_frag_invariants() が配線契約を検証(デバッグモード)
- test-only PoC で配線の実証完了5個のテスト
**配線契約**:
- Continue(loop_id) の EdgeStub.target = Some(header)
- Break(loop_id) の EdgeStub.target = Some(after)
- Normal/Return/Unwind の EdgeStub.target = None上位へ伝搬
**Phase 265 P1 のスコープ**:
- ✅ Frag 層での配線ロジック
- ✅ BasicBlockId 層でのテスト証明
- ❌ MIR 命令生成Phase 266+
- ❌ NormalizedShadow/JoinIR層への適用Phase 266+、JoinIR-VM Bridge 改修後)
次フェーズPhase 265 P2で seq/if_ 実装 + pattern番号分岐削減へ。
現時点では既存 pattern6/7/8 や merge/EdgeCFG は未改変(配線能力の証明のみ)。