Files
hakorune/docs/development/current/PHI_NORMALIZATION_PLAN.md
Moe Charm 391a095f4c Phase 9.78h: Stabilize MIR26 pipeline
- Add lib test to sync Core Instruction names with docs (INSTRUCTION_SET.md)
- Optimizer: Pass 0 normalizes legacy ops -> unified (TypeCheck/Cast->TypeOp,
  WeakNew/WeakLoad->WeakRef, BarrierRead/Write->Barrier)
- Optimizer: diagnostics for legacy ops; forbid via NYASH_OPT_DIAG_FORBID_LEGACY=1
- Runner: treat diagnostics (unlowered/legacy) as fatal when enabled
- Printer: unify legacy print style to TypeOp/WeakRef/Barrier
- Verifier: treat Phi inputs correctly (skip merge/dominance violations for Phi)
- Docs: update PHI_NORMALIZATION_PLAN; CURRENT_TASK: add risk note for op duplication
- Misc: PHI debugging/logs kept stable; snapshots still green
2025-08-26 06:30:01 +09:00

27 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phi 正規化プラン9.78h スキャフォールド)
目的: ループ/分岐における Phi 選択を正道に戻し、借用衝突を避けつつ段階導入する。
段階プラン80/20
- Step 1: 実行系での選択復帰(完了)
- `previous_block` に基づき `inputs[(bb==prev)]` を選択。見つからない場合は先頭をフォールバック。
- デバッグ: `NYASH_VM_DEBUG_PHI=1` で選択ログ。
- Step 2: LoopExecutor 連携
- `VM::loop_execute_phi``LoopExecutor::execute_phi` に委譲(安全な借用構成に整理)。
- `record_transition(from,to)` をもとにヘッダ検出・イテレーション情報を活用。
- Step 3: 正規 SSA への復帰
- Builder 側で phi 挿入・seal・predecessor 更新を正道で実装。
- Verifier に phi 一貫性(定義支配/マージ使用)チェックを追加・厳格化。
- Step 4: ログ削減とテスト
- 代表ケースloop/if-merge/whileをスナップショット化。
- 既定で静音、`NYASH_VM_DEBUG_PHI` のみで詳細。
実装状況2025-08-26
- Step 1 完了: `VM::loop_execute_phi``previous_block` による選択に対応。
- Step 2 スケルトン導入: `LoopExecutor` へphi実行を委譲し、`control_flow::record_transition(from,to)``previous_block` と遷移を記録。VM本体の分岐時に呼び出し済み。
- 既知の課題: `LoopExecutor` のヘッダ検出/イテレーション管理の強化(いまは簡易)。
次アクション
- `LoopExecutor` のヘッダ判定とイテレーション可視化を拡充(`is_loop_header` の実装、`NYASH_VM_DEBUG_PHI` 出力拡張)。
- Builder 側の phi 正規化 TODO を CURRENT_TASK に追記seal/pred更新・Phi先頭挿入の確認用ユニットテスト追加