31 lines
1.8 KiB
Markdown
31 lines
1.8 KiB
Markdown
# 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 桁% 改善(ベース比)。
|