Phase‑20.31 — Optimizations: LLVM Opt + MIR Prepass + UserBox Birth
目的
- ハコルネの実行性能を一段引き上げる。特に「ユーザーボックス生成」の遅さを改善し、代表ケースで C の約 80% を狙う。
スコープ(本フェーズ)
- LLVM 最適化レベルの切替を CLI/ENV から統一管理(llvmlite と native の両経路)。
- ENV:
HAKO_LLVM_OPT_LEVEL(alias:NYASH_LLVM_OPT_LEVEL)で 0〜3 を指定可能。llvmlite ハーネス / Python ビルダー双方で尊重する。 - MIR プリ最適化(安全セット)を導入し、IR 形状を最適化に適した形へ整える。
- ユーザーボックス生成(birth)の高速化: 形状キャッシュ+連続領域確保のファストパスを追加(実装計画)。
非スコープ(次フェーズ)
- ネイティブ AOT ライブラリの内部 LLVM パス実装(
libhako_llvmの本実装)。 - 高度なループ最適化(SLP/Vectorize など)は設計のみ(既定 OFF)。
性能目標(代表ケース)
- C の 80% を目安(±5% の揺れを許容)。
- ベンチ対象(代表):
- 算術ループ(i64)+ 条件分岐(if/phi)
- ユーザーボックスを N 回生成(小さな固定フィールド数: 2〜4)→ 数値フィールドに書き込み → 破棄
- 配列 push/pop を挟む軽いメモリアクセス
測定方針
- AOT(llvmlite)で EXE を生成し、同等の C 実装と実行時間を比較(3 回以上、最小値採用)。
- 既定は O2、
HAKO_LLVM_OPT_LEVEL=3でも回帰しないこと(負例も併設)。
合格基準(MVP)
- 代表ベンチで C の ≥ 80% を達成。
- quick/integration が緑のまま(既定挙動は不変)。
- ユーザーボックス生成の 2 桁% 改善(ベース比)。