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

1.8 KiB
Raw Blame History

Phi 正規化プラン9.78h スキャフォールド)

目的: ループ/分岐における Phi 選択を正道に戻し、借用衝突を避けつつ段階導入する。

段階プラン80/20

  • Step 1: 実行系での選択復帰(完了)
    • previous_block に基づき inputs[(bb==prev)] を選択。見つからない場合は先頭をフォールバック。
    • デバッグ: NYASH_VM_DEBUG_PHI=1 で選択ログ。
  • Step 2: LoopExecutor 連携
    • VM::loop_execute_phiLoopExecutor::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_phiprevious_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先頭挿入の確認用ユニットテスト追加