3.1 KiB
3.1 KiB
MIR進化計画: MIR14 → MIR13 → MIR17
概要
LoopForm導入に向けた段階的なMIR進化戦略。PHI命令の責務をLLVM層に移管し、より高レベルな制御構造表現を導入する。
命令数の変遷
MIR14(現在): 14命令(PHIあり)
↓ Phase 15終盤
MIR13: 13命令(PHI除去)
↓ Phase 16
MIR17: 17命令(LoopForm追加)
MIR13(Phase 15終盤)
削除される命令
- Phi: SSA PHIノードの生成をLLVM層に移管
残る13命令
- Const
- Load / Store
- UnaryOp / BinOp / Compare / TypeOp
- Branch / Jump / Return
- NewBox / BoxCall
- ExternCall / Call
- Throw / Catch(既存維持)
実装方針
- Bridge/BuilderはPHIを生成しない
- LLVM層(llvmlite/Resolver)がCFGパターンからPHIを合成
- VM/Interpreterは直線的実行を継続(PHI無視)
MIR17(Phase 16)
追加される4命令(LoopForm)
-
LoopHeader
{ id, params[] }- ループヘッダBBの宣言
- params[]はループ搬送値のプレースホルダ
-
LoopEnter
{ header: bb, args[] }(terminator)- Preheaderからヘッダへの遷移
- args[]は搬送値の初期値
-
LoopLatch
{ header: bb, args[] }(terminator)- 本体末尾からヘッダへのバックエッジ
- args[]は更新後の搬送値
-
LoopExit
{ exit: bb }(terminator)- ループからの脱出(break相当)
なぜ+4命令か
- ループの構造を明示的に表現
- Preheader/Header/Body/Exitの役割を宣言的に
- LLVM層でのPHI生成が機械的に可能
合流点の扱い(将来検討)
MergeForm(追加候補)
// If/Else等の合流用(将来のMIR18以降)
MergeHeader { id, params[] }
MergeEnter { header: bb, args[] }
移行のメリット
-
責務分離の明確化
- MIR: 制御構造の宣言
- LLVM: SSA表現の生成
-
段階的移行
- Phase 15: PHI生成を止める(互換性維持)
- Phase 16: LoopForm導入(新機能)
-
将来拡張への道筋
- Generator/Async/Effectへの対応準備
- LifeBox Model(LBM)への布石
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 16(MIR17化)
- MIR: LoopForm命令の追加
- Bridge: Loop構造の認識とLoopForm生成
- llvmlite: LoopFormからPHIへの変換
- ドキュメント: MIR17仕様書
関連文献
- 論文A(MIR13/14): 基本設計
- 論文D(SSA構築): PHI生成の理論
- 論文E(本稿): LoopForm理論
- CURRENT_TASK.md: 実装計画