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

2.0 KiB
Raw Blame History

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環境変数索引