119 lines
3.1 KiB
Markdown
119 lines
3.1 KiB
Markdown
|
|
# 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命令
|
|||
|
|
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無視)
|
|||
|
|
|
|||
|
|
## MIR17(Phase 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(追加候補)
|
|||
|
|
```rust
|
|||
|
|
// 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 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: 実装計画
|