Commit Graph

2 Commits

Author SHA1 Message Date
4ba3fcd615 Phase 33-3.2: phi_invariants/conservative の JoinIR 側への移譲
実装内容:
- verify_select_minimal() 実装(Select 命令の最小 invariant チェック)
- phi_invariants.rs / conservative.rs のエッセンス抽出・移譲
- 4 テスト追加(simple/local with verify, reject multiple selects, check invariants)

移譲した責務:
- phi_invariants.rs::ensure_if_values_exist() → 型一貫性・完全性チェック
- conservative.rs::ConservativeMerge → 単一 PHI チェック

テスト結果:
-  8/8 tests PASS
-  simple/local パターン: Verifier PASS
-  不正パターン(複数 Select): Verifier REJECT
-  invariant ログ: conservative.rs / phi_invariants.rs からの移譲を明記

制限事項:
- IfSelectTest.* のみ対象、本線 if_phi は保持
- 削除は Stage-1/Stage-B/selfhost への適用後に行う

Phase 33-3.2 完了(2025-11-27)
2025-11-27 03:55:45 +09:00
5cfb0e1d5b Phase 33-3: If/PHI MIR pattern matching + Select lowering (minimal patterns)
Implementation:
- Implement MIR pattern matching in if_select.rs (simple/local patterns)
- Add try_lower_if_to_joinir() entry point in lowering/mod.rs
- Create comprehensive integration tests (4/4 passing)

Pattern Support:
- Simple pattern: if cond { return 1 } else { return 2 }
  - Both blocks must have Return only (no instructions)
- Local pattern: if cond { x = a } else { x = b }; return x
  - Each branch has exactly 1 Copy instruction
  - Both branches jump to same merge block
  - Merge block Returns the assigned variable

Safety Mechanisms:
- Dev toggle: NYASH_JOINIR_IF_SELECT=1 required
- Function name filter: Only IfSelectTest.* functions
- Fallback: Returns None on pattern mismatch
- Zero breaking changes: Existing if_phi path untouched

Tests (4/4 PASS):
- test_if_select_simple_pattern
- test_if_select_local_pattern
- test_if_select_disabled_by_default
- test_if_select_wrong_function_name

Files:
- Modified: src/mir/join_ir/lowering/if_select.rs (pattern matching)
- Modified: src/mir/join_ir/lowering/mod.rs (entry point)
- New: src/tests/mir_joinir_if_select.rs (integration tests)
- Modified: src/tests/mod.rs (module registration)

Phase 33-3.2/3.3 (legacy removal) pending

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 03:28:32 +09:00