Files
hakorune/docs/phases/phase-11.8_mir_cleanup/PLAN.md

46 lines
2.0 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.

# Phase 11.8 MIR Cleanup Plan (Core13 固定)
目的
- MIR を「最小の接着剤」に純化し、BoxCall へ集約。
- 最適化は VM/JIT の boxcall 経路に集中脱仮想化・境界消去・Barrier
スコープ
- BoxCall 集約: ArrayGet/Set, RefGet/Set → BoxCallget/set/getField/setField
- 維持: BinOp/Compare は MIR に残す(定数畳み込み/分岐簡約を最大化)。
- 効果: EffectMask の正確化、WriteBarrier の確実化。
段階導入トグルenv・既定ONにする
- `NYASH_MIR_CORE13=1` … Core13 一括有効
- `NYASH_OPT_DIAG_FORBID_LEGACY=1` … 旧命令が最終MIRに残ったらエラー
- 参考: `NYASH_MIR_ARRAY_BOXCALL=1`, `NYASH_MIR_REF_BOXCALL=1` は CORE13=1 で内包
実装ステップ
1) Optimizer パス(デフォルト ON
- ArrayGet/Set → BoxCall に変換
- RefGet/Set → BoxCall に変換
- 変換後の Effect/Barrier を整合
2) VM: execute_boxcall の fastpath
- (type_id, method_id) で Array/Field を高速化
- WriteBarrier の確実化
3) JIT: lower_boxcall の fastpath
- Array: GEP+Load/StoreBounds/Barrier含む
- Field: 内部表現に応じた inlining失敗時 plugin_invoke
4) Smokes/BenchCore13基準
- array_access_sequential / array_access_random / field_access / arithmetic_loop
- 基準: 速度 ±5%, メモリ ±10%, MIR サイズ -20% 目標
5) 検証CIゲート
- SSA 保持Phi 導入後の整合)
- 意味保存before/after 等価)
非スコープ(当面)
- 算術/比較の BoxCall 化(最適化効率低下を避け据え置き)
完了基準
- Core13 を既定ONでスモーク/ベンチが基準達成
- 旧命令ArrayGet/ArraySet/RefGet/RefSet/Unary/Load/Storeが最終MIRに出現しない
- VM/JIT ともに BoxCall fastpath/vtable の発火が確認できる
関連
- TECHNICAL_SPEC.md詳細仕様
- docs/development/runtime/ENV_VARS.md環境変数索引