## Summary Implemented fail-fast validation for PHI ordering and value resolution in strict mode. ## Changes ### P1-1: Strict mode for "PHI after terminator" - File: `src/llvm_py/phi_wiring/wiring.py::ensure_phi` - Behavior: `NYASH_LLVM_PHI_STRICT=1` → RuntimeError if PHI created after terminator - Default: Warning only (no regression) ### P1-2: Strict mode for "fallback 0" - File: `src/llvm_py/phi_wiring/wiring.py::wire_incomings` - Behavior: Strict mode forbids silent fallback to 0 (2 locations) - Location 1: Unresolvable incoming value - Location 2: Type coercion failure - Error messages point to next debug file: `llvm_builder.py::_value_at_end_i64` ### P1-3: Connect verify_phi_ordering() to execution path - File: `src/llvm_py/builders/function_lower.py` - Behavior: Verify PHI ordering after all instructions emitted - Debug mode: Shows "✅ All N blocks have correct PHI ordering" - Strict mode: Raises RuntimeError with block list if violations found ## Testing ✅ Test 1: strict=OFF - passes without errors ✅ Test 2: strict=ON - passes without errors (no violations in test fixtures) ✅ Test 3: debug mode - verify_phi_ordering() connected and running ## Scope - LLVM harness (Python) changes only - No new environment variables (uses existing 3 from Phase 277 P2) - No JoinIR/Rust changes (root fix is Phase 279) - Default behavior unchanged (strict mode opt-in) ## Next Steps - Phase 278: Remove deprecated env var support - Phase 279: Root fix - unify "2本のコンパイラ" pipelines 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.0 KiB
5.0 KiB
Phase 277: PHI関連改善シリーズ
概要
Phase 275/276で完了したFloat型PHI対応・型取得SSOT化の後続改善として、PHI関連の環境変数統合・ドキュメント整備を実施。
このPhaseの狙いは「PHIまわりの迷子を無くす」こと:
- どの層が何を決めるか(SSOT)を固定する
- PHI順序/配線の違反を “後段で壊れる” ではなく “原因で止まる” に寄せる
- そして根治として「2本のコンパイラ(パイプライン差による二重バグ)」を Phase 279 で潰せるように導線を引く
入口(関連):
- Now:
docs/development/current/main/10-Now.md - Backlog:
docs/development/current/main/30-Backlog.md
サブフェーズ一覧
Phase 277 P0: PHI型推論ドキュメント整備(予定)
- 目的: Phase 275/276で実装したPHI型推論ロジックのドキュメント化
- 内容:
- MIR型伝播 → LLVM IR型生成のフロー図
- type_helper.py(LLVM harness 側の型取得SSOT)の設計ドキュメント
- PHI型推論のベストプラクティス
- 設計メモ(このPhase配下のSSOT案):
docs/development/current/main/phases/phase-277/P0-DESIGN.md
- 指示書(Claude Code):
docs/development/current/main/phases/phase-277/P0-INSTRUCTIONS.md
Phase 277 P1: PHI順序検証強化(予定)
- 目的: PHI命令の配置順序検証を強化
- 内容:
- phi_placement.py の検証ロジック強化
- LLVM IR仕様準拠チェック(PHI → 非PHI → terminator)
- 順序違反時のエラーメッセージ改善
- 検証メモ(このPhase配下のSSOT案):
docs/development/current/main/phases/phase-277/P1-VALIDATION.md
- 指示書(Claude Code):
docs/development/current/main/phases/phase-277/P1-INSTRUCTIONS.md
Phase 277 P2: PHI関連環境変数の統合・整理 ✅
完了日: 2025-12-22
- 目的: PHI関連環境変数を 8個 → 3個 に統合
- 完了ドキュメント:
P2-COMPLETION.md - 達成内容:
- ✅ debug_helper.py 作成(環境変数チェックのSSOT)
- ✅ 3つの統合関数実装(is_phi_debug_enabled 他)
- ✅ 9ファイル修正完了(wiring.py, tagging.py 他)
- ✅ 後方互換性対応(Phase 278で削除予定)
- ✅ ドキュメント更新(environment-variables.md)
- 効果:
- ユーザビリティ向上(覚える変数 8個→3個、62%削減)
- 保守性向上(環境変数チェックのSSOT化)
- ドキュメント簡潔化
統合後の環境変数(P2完了版)
# PHI一般デバッグ(生成・型推論・順序)
NYASH_LLVM_DEBUG_PHI=1
# PHI詳細トレース(wiring・vmap変化)
NYASH_LLVM_DEBUG_PHI_TRACE=1
# PHI厳格モード(ゼロフォールバック禁止)
NYASH_LLVM_PHI_STRICT=1
詳細: docs/reference/environment-variables.md の「PHI デバッグ関連」セクション
関連Phase
- Phase 275: Float型PHI対応(MIR型伝播 → LLVM IR double生成)
- Phase 276: 型取得SSOT化(type_helper.py)
- Phase 278: 後方互換性削除(旧環境変数サポート削除予定)
- Phase 279: パイプラインSSOT統一(“2本のコンパイラ” 根治)
ファイル構成
phase-277/
├── README.md # 本ファイル(Phase 277概要)
├── P2-COMPLETION.md # P2完了報告
├── P0-DESIGN.md # P0設計ドキュメント(docs)
└── P1-VALIDATION.md # P1検証強化ドキュメント(validation)
重要なSSOT(どこが何を決めるか)
最小の地図(迷ったらここから辿る):
-
PHI env var(統合SSOT):
src/llvm_py/phi_wiring/debug_helper.py- 使う側は
is_phi_debug_enabled()/is_phi_trace_enabled()/is_phi_strict_enabled()だけを見る - 旧 env var の撤去は Phase 278
- 使う側は
-
LLVM harness 側の型取得SSOT:
src/llvm_py/phi_wiring/type_helper.pyget_phi_dst_type(...)とdst_type_to_llvm_type(...)が入口- “PHIのdst_typeをどこから取るか” をここに集約する(Phase 276 P0)
-
PHI placeholder を block head に作るSSOT:
src/llvm_py/phi_wiring/wiring.py::ensure_phi- llvmlite は “後から命令を並べ替える” が基本できない
- よって PHI は “作るタイミング” が勝負(PHI-first の契約をここで守る)
-
順序検証(verifier):
src/llvm_py/phi_placement.py- 現状は “並べ替え” ではなく “検証/レポート” のみ(llvmlite制約)
- Phase 277 P1 で fail-fast 導線を強化する(strict mode の意味を強くする)
-
根治(パイプライン二重化の解消):
docs/development/current/main/phases/phase-279/README.md
今後の予定
- Phase 277 P0: PHI型推論ドキュメント整備
- Phase 277 P1: PHI順序検証強化
- Phase 278: 後方互換性削除
Phase 277 P2 完了! 次はP0/P1の計画策定へ。