Files
hakorune/docs/private/papers/paper-e-loop-signal-ir/POC_PLAN.md

2.6 KiB
Raw Blame History

LoopForm IR / LifeBox Model — PoC計画安全な縦スライス

コア要件(不変条件)

  • ループ正規形: すべての制御は loop.begin → loop.iter → loop.branch → loop.end の列で現れ、dispatchブロックで合流PHIはdispatch直後のみ
  • Signal整合性: LoopSignal<T> = Next/Break/Yield/Return は i8タグ単一SSAペイロード。4タグは厳密相互排他。
  • 単一継続点: Loopごとに1出口break/return合流点。Loop1は必ず即時畳み込みinlineでゼロコスト化。
  • 可逆性: LoopForm → Core13 への逆Loweringは常に可能フラグでON/OFF

IR最小仕様再掲

  • Signal: 表層 LoopSignal<T> / 実体 { i8 tag, T payload }tag=0/1/2/3
  • 命令4種中間正規形:
    • loop.begin %lp(メタ: ソース位置/ID
    • loop.iter %sig, %lp, %state — LoopBox 1反復を実行して Signal を返す
    • loop.branch %sig { onNext: L1, onBreak: L2, onYield?: L3, onReturn?: L4 }
    • loop.end %lp
  • LoopBox契約: どのBoxも init → step(state) → fini。通常Boxは step が1回で Break(result)=Loop1

逆Lowering規則抜粋

  • scope: Loop1iter→即Break→end→ 直列化
  • while: iter→Nextで継続、Breakで終了dispatch合流→ br/jump へ
  • if: Loop1条件→ next/break(path))→ branch+phi へ
  • return: Break(Return v) に統一→最上位dispatch合流で Return v

PoC範囲

  • 命令セット: 4命令 + Signal型のみ。対象は while / scope / ifLoop1に限定。
  • 逆Lowering: Core13へ完全可逆VM/Interpreter 経路の実行一致)。
  • 最適化: Loop1インライン畳み込みYieldなしのstate省略、dispatch一点合流を先行実装。

受入基準

  • 構造: dispatch合流点のみでPHIPrinter/Verifierで検出可能
  • 結果一致: 5スモークconst/return, add, branch+phi, while, nested-branchが現行MIRと一致。
  • トレース: covered/unsupported と decisions(allow,fallback) をLoopForm/逆Lowering双方で採取できる。

拡張の切り口(後続)

  • 関数/returnの完全Loop化: ReturnをSignalに残すか、Loop外のReturn命令に落とすかをflag化。
  • generator/async: YieldをSignalに昇格。state継続スロットを LoopBox側で保持状態箱を1st-classに
  • 効果モデル: effect latticePure/RO/SideをSignalに乗せ、dispatchでbarrier位置を決めやすく。
  • AOT/JSON v0: mir_version/extensionsでLoopFormは“中間正規形”として明示。