Files
hakorune/docs/private/papers/paper-e-loop-signal-ir/mir-evolution-plan.md

3.1 KiB
Raw Blame History

MIR進化計画: MIR14 → MIR13 → MIR17

概要

LoopForm導入に向けた段階的なMIR進化戦略。PHI命令の責務をLLVM層に移管し、より高レベルな制御構造表現を導入する。

命令数の変遷

MIR14現在: 14命令PHIあり
    ↓ Phase 15終盤
MIR13: 13命令PHI除去
    ↓ Phase 16
MIR17: 17命令LoopForm追加

MIR13Phase 15終盤

削除される命令

  • Phi: SSA PHIードの生成をLLVM層に移管

残る13命令

  1. Const
  2. Load / Store
  3. UnaryOp / BinOp / Compare / TypeOp
  4. Branch / Jump / Return
  5. NewBox / BoxCall
  6. ExternCall / Call
  7. Throw / Catch既存維持

実装方針

  • Bridge/BuilderはPHIを生成しない
  • LLVM層llvmlite/ResolverがCFGパターンからPHIを合成
  • VM/Interpreterは直線的実行を継続PHI無視

MIR17Phase 16

追加される4命令LoopForm

  1. LoopHeader { id, params[] }

    • ループヘッダBBの宣言
    • params[]はループ搬送値のプレースホルダ
  2. LoopEnter { header: bb, args[] } (terminator)

    • Preheaderからヘッダへの遷移
    • args[]は搬送値の初期値
  3. LoopLatch { header: bb, args[] } (terminator)

    • 本体末尾からヘッダへのバックエッジ
    • args[]は更新後の搬送値
  4. LoopExit { exit: bb } (terminator)

    • ループからの脱出break相当

なぜ+4命令か

  • ループの構造を明示的に表現
  • Preheader/Header/Body/Exitの役割を宣言的に
  • LLVM層でのPHI生成が機械的に可能

合流点の扱い(将来検討)

MergeForm追加候補

// If/Else等の合流用将来のMIR18以降
MergeHeader { id, params[] }
MergeEnter { header: bb, args[] }

移行のメリット

  1. 責務分離の明確化

    • MIR: 制御構造の宣言
    • LLVM: SSA表現の生成
  2. 段階的移行

    • Phase 15: PHI生成を止める互換性維持
    • Phase 16: LoopForm導入新機能
  3. 将来拡張への道筋

    • Generator/Async/Effectへの対応準備
    • LifeBox ModelLBMへの布石

AI協働の記録2025-09-16

Codex提案

  • PHI合成をllvmlite側で実施
  • LoopForm/MergeFormの構造化表現
  • TryRegionによる例外構造化将来

人間の洞察

  • 「MIR13に減らしてから+4でMIR17」
  • 段階的移行の重要性
  • 一気に変えないことの価値

合意形成

  • Phase 15でまずPHI非生成化
  • 安定後にLoopForm導入
  • 責務分離を徹底

実装チェックリスト

Phase 15終盤MIR13化

  • Bridge: PHI生成を無効化するフラグ
  • llvmlite: Resolver実装PHI合成
  • Smoke: ループ搬送値のテスト
  • VM: PHI無視の動作確認

Phase 16MIR17化

  • MIR: LoopForm命令の追加
  • Bridge: Loop構造の認識とLoopForm生成
  • llvmlite: LoopFormからPHIへの変換
  • ドキュメント: MIR17仕様書

関連文献

  • 論文AMIR13/14: 基本設計
  • 論文DSSA構築: PHI生成の理論
  • 論文E本稿: LoopForm理論
  • CURRENT_TASK.md: 実装計画