Files
hakorune/docs/private/ideas/other/2025-08-27-mir-roundtrip-optimization.md

3.9 KiB
Raw Blame History

MIRラウンドトリップ最適化 - 永続チューニング装置

作成日: 2025-08-27 Status: 構想段階 Priority: High Related: ChatGPT5との共同構想

🎯 核心コンセプト

nyash → MIR → VM → Cranelift → nyash再出力

このループを回すことで、最適化の恩恵を全ルートに一括で波及させる「永続チューニング装置」を実現。

🏗️ ラウンドトリップの芯揺るがない3点

1. 唯一の真実MIR

  • すべての最適化はMIR上に集約
  • VM/Cranelift/WASM/LLVMはMIRの投影でしかない
  • ルート固有の最適化は「MIRヒント属性」として逆流

2. MIRは常に正規形canonical

MIR → Canonicalizer → MIR*
  • 順序・冗長・等価命令を正規化
  • どのルートを通っても再度正規形に戻す
  • 振動(最適化の行ったり来たり)を防ぐ

3. 再出力nyashは「意味等価の整形」

  • MIR → nyash_printerで人が読めるnyashに戻す
  • 目的は可読な再配布・差分レビューと最適化の可視化
  • コメント/マクロは期待しない

💎 必須コンポーネント(超ミニマム)

MIR Canonicalizer

  • SSA再構築
  • 冗長Phi削除
  • pureのCSE
  • mutの順序制約保持
  • ioは並べ替え禁止

MIR Verifier

  • 強1本・強循環禁止
  • weak失効チェック
  • @gcablefini禁止
  • 効果整合性

nyash_printer

  • public/privateフィールド再構成
  • 関数、with/readガード、Sync復元
  • ソースマップMIR↔nyash保存

🚀 最適化の入口MIR上だけ

ローカル最適化

  • peephole, const-fold, copy-prop
  • dead-branch, LICM(pure)

所有/弱参照最適化

  • adopt/release短絡
  • weak_loadのnull先行分岐

Bus最適化

  • elisionpure/read & 単一受信なら直呼び)

同期最適化

  • read→共有ロック
  • write/io→排他ロック

プロファイル誘導

VM収集データ → MIR属性に反映
- op_count
- hot_bb
- bytes_copied
- send_count

🛡️ 無限最適化にしない「固定点」の作法

三段階で必ず終了

正規化 → 最適化 → 正規化

単調コスト

以下を悪化させたら採用しない/ロールバック:

  • instr_count(pure域)↓
  • bytes_copied↓
  • send_count↓
  • alloc_freeバランス≥0

等価性ガード

  • I/Oログ完全一致
  • fini順序一致@must_drop対象

ハッシュ鍵

  • MIR*の構造ハッシュを成果物キャッシュキーに
  • 同形なら二度目以降はスキップ

📊 実行フロー(今日から回せる)

nyash  --emit-mir     src.ny   > a.mir
mir    --canonicalize a.mir    > a*.mir
mir    --optimize     a*.mir   > b.mir
vm     --bc           b.mir    > b.bc
vm     --run          b.bc            # 基準実行+プロファイル採取
jit    --cranelift    b.mir    > code # JIT or AOT
mir    --pretty       b.mir    > b.ny # 最適化後nyash出力

CIに入れる「黄金テスト」

  • 同値: interp == vm == cranelift結果I/Oログ
  • GC等価: --gc=on/offでログ差分0
  • 資源確定: open==fini(@must_drop)
  • ゼロコピー: dup()以外でbytes_copied == 0
  • サイズ: send_count / alloc_countが基準値以下

🎯 まず入れるべきパス(効果大きい順)

  1. Bus-elision(安全条件つき)
  2. CSE/Copy-prop/Dead-branchpure域)
  3. WeakLoad先読みnull fast-path
  4. Mutex/Rwロック折り畳み(単一呼出シーケンス統合)

※これだけでVM/Cranelift/WASMの全部が速くなる

📝 直近ToDo

  • mir canonicalizerPhi縮退/純粋域の順序固定)
  • bus-elision安全条件実装
  • profile schema定義
  • cache key実装
  • nyash_printer v0

「どのルートを通っても、最後は同じMIRへ戻る」- 一箇所直せば全部に効く世界