Files
hakorune/CURRENT_TASK.md
nyash-codex 73c305c453 docs(phase41): Phase 41-1 completion documentation
- Update CURRENT_TASK.md with Phase 41-1 results
- Update docs/private submodule (Phase 41-1 inventory tables)

Phase 41-1 Results:
- Dead code deletion: 147 lines (bonus discovery)
- Inventory tables for if_phi.rs (4 functions) and conservative.rs (2 functions)
- Level 3 Callsite Overview section added

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 12:08:54 +09:00

7.8 KiB
Raw Blame History

Current Task — JoinIR / PHI 削減スナップショット2025-11-29 時点)

このファイルは「今どこまで終わっていて、次に何をやるか」を 1000 行以内でざっくり把握するためのスナップショットだよ。
過去の詳細ログは docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md や各 Phase の README/TASKS を見てね。


0. 現在地ざっくり

  • JoinIR ライン
    • Phase 2731: Loop→JoinIR loweringskip_ws / trim / append_defs / Stage1 minimalで、ループの制御構造を関数継続だけで表現できることを実証済み。
    • Phase 3334: IfSelect / IfMerge / JoinIR FrontendIf/Loop/Break/Continue実装。AST→JoinIR→MIR→VM まで tiny ケースが通る。
  • PHI 削減ライン
    • Phase 3536: HIGH/MEDIUM 安全度の PHI 箱if_body_local_merge / phi_invariants / LoopSnapshotMergeBoxの削除・縮退で 537 行削減。
    • Phase 3740: If 側 PHIif_phi.rs / conservative.rsの Level 1/2 相当まで設計一部削減。array_ext.filter については JoinIR Frontend + JoinFuncMeta に移行し、collect_assigned_vars を削除済み。
  • これから
    • Phase 41: If 側 PHI Level 3本体ロジックの代表ケースを JoinIR 経路に載せる設計と最初の実装。
    • 以降: If 側 PHI 本体削減 → Classifier Trio → AST→JoinIR Frontend 本線化 → LLVM / ny-llvmc の JoinIR 統合。

1. 最近の主戦場Phase 3341

1-00a. Phase 33 — IfSelect / IfMerge + PHI 設計原則

  • IfSelect / IfMerge lowering 実装simple/local, 23 変数パターン)。
  • VM ラインへの If lowering ドライランを IfLoweringDryRunner に箱化し、VM パイプラインと解析ロジックを分離。
  • 「JoinIR は PHI 生成器SSOT、既存 PHI の変換器にはしない」原則をコードdocs で固定。
  • docs: docs/private/roadmap2/phases/phase-33-joinir-if-phi-cleanup/if_joinir_design.md

1-00b. Phase 34 — JoinIR FrontendAST→JoinIR

  • 目的: ASTProgram JSON v0→ JoinIR Frontend を設計・実装し、「PHI 意味論の SSOT を JoinIR 側に寄せる」。
  • 実績:
    • If: simple/local/json_shape パターンを Select に正規化(同じ JoinIR 出力)。
    • Loop: tiny while / break / continue を 3 関数構造entry/loop_step/k_exit Jump/Call/Select で表現。
    • MethodCall: substring などを JoinInst::MethodCall として構造化し、JoinIR→MIR Bridge で BoxCall に変換。
  • docs: docs/private/roadmap2/phases/phase-34-joinir-frontend/README.md

1-00c. Phase 3536 — PHI 箱削減HIGH/MEDIUM

  • Phase 35HIGH:
    • if_body_local_merge.rs / phi_invariants.rs 削除(合計 430 行)。
    • PHI_BOX_INVENTORY.md で PHI 箱の一覧と削除順を整理。
  • Phase 36MEDIUM:
    • LoopSnapshotMergeBox を「Exit PHI マージ専用の純粋静的ユーティリティ」に縮退470→363 行)。
    • PhiBuilderBox に Loop/If/Common/Stub の責務マーカー追加(実装本体削減は Phase 38+)。
  • docs:
    • docs/private/roadmap2/phases/phi-reduction-series/INDEX.md
    • docs/private/roadmap2/phases/phase-36-phi-midrange/README.md

1-00d. Phase 3739 — If 側 PHI Level 1/2 設計と準備

  • Phase 37: If 側 PHI 全体設計docs-only
    • if_phi.rs / conservative.rs の責務表、12 callsite の難易度分類。
    • 削除基準Level 1/2/3の定義。
  • Phase 38: if_phi.rs Level 1 削除90 行)。
    • merge_modified_with_controldead codeextract_assigned_varJoinIR AST lowering で代替)を削除。
  • Phase 39: Level 2 準備array_ext.filter 選定と JoinIR 拡張設計)。
    • array_ext.filter を代表 if-in-loop パターンに選定。
    • JoinIR Frontend / JoinFuncMeta / Bridge 拡張と削除条件を設計。
  • docs:
    • docs/private/roadmap2/phases/phase-37-if-phi-reduction/README.md
    • docs/private/roadmap2/phases/phase-38-if-phi-level1/README.md
    • docs/private/roadmap2/phases/phase-39-if-phi-level2/README.md

1-00e. Phase 40 — If 側 PHI Level 2 実装array_ext.filter

  • 目的: array_ext.filter の ifinloop PHI を JoinIR Frontend + JoinFuncMeta + Bridge 経由に移し、collect_assigned_vars を削除する。
  • 実績:
    • JoinFuncMeta / JoinFuncMetaMap / convert_join_module_to_mir_with_meta 実装。
    • AST→JoinIR Frontend で ifinloop の modified 変数集合を解析し、JoinIR→MIR Bridge で PHI 生成。
    • loop_builder.rs に HAKO_JOINIR_ARRAY_FILTER 経路を追加し、Route BJoinIR 経路)をデフォルト化。
    • collect_assigned_vars を削除し、JSON ベースの collect_assigned_vars_via_joinir に置き換えPhase 40-4.1)。
    • デッドな env フラグ等をクリーンアップ40-4.1.1)。
  • 削減実績Phase 40 時点):
    • 35 行collect_assigned_vars16 行(デッドコード)= 51 行純減。
  • docs:
    • docs/private/roadmap2/phases/phase-40-if-phi-level2/README.md
    • docs/private/roadmap2/phases/phi-reduction-series/INDEX.md

1-00f. Phase 41 — If-Side PHI Level 3 Reduction Planning

  • 目的:
    • if_phi.rs / conservative.rs に残る「Level 3 本体ロジック」を JoinIR 経路に移すための設計と代表ケース実装の入口を定義。
  • Phase 41-1 完了2025-11-29:
    • Level 3 関数の再インベントリ・callsite 再分類完了
    • デッドコード 147 行削除(ボーナス)
      • merge_modified_at_merge_with (70行)
      • merge_with_reset_at_merge_with (29行)
      • get_conservative_values (48行)
    • README.md に Level 3 Callsite Overview 追加
  • 次:
    • Phase 41-2: 代表 If 関数選定nested if / selfhost parser
    • Phase 41-3: JoinIR Frontend / Bridge 拡張設計
    • Phase 41-4: A/B 実装 & テスト
  • docs:
    • docs/private/roadmap2/phases/phase-41-if-phi-level3/README.md
    • docs/private/roadmap2/phases/phase-41-if-phi-level3/TASKS.md

2. 中期 TODOざっくり

  • If 側 PHI Level 2 残り
    • compute_modified_names / merge_with_reset_at_merge_with / conservative.rs struct を JoinIrConservativeAnalyzer + JoinIR Verifier 側に寄せる実装Phase 40-4.2〜)。
  • If 側 PHI Level 3
    • Phase 41 で選ぶ代表 If 関数について JoinIR Frontend + Bridge で Route B を実装し、A/B テストを通す。
    • その後、if_phi.rs / conservative.rs から該当パターン分のコード削減を検討Phase 42
  • Classifier Trio
    • LoopVarClassBox / LoopExitLivenessBox / LocalScopeInspectorBox を LoopScopeShape に吸収し、JoinIR lowering / LoopForm 側から直接 LoopScopeShape を見る構造に整理Phase 39 計画の後続)。

3. 旧フェーズ(過去ログへのポインタ)

古いフェーズの詳細な経緯やログは、以下のドキュメントと
docs/private/roadmap2/CURRENT_TASK_2025-11-29_full.md を見てね。

  • Phase 21.7 — Static Box Methodization
    • StaticMethodId / NamingBox で BoxName.method/arity 名前解決の SSOT 化。
    • docs: docs/development/current/main/phase-21.7-naming-ssot-checklist.md など。
  • Phase 25.x / 26.x — LoopForm v2 / LoopSSA v2 / Exit PHI / ExitLiveness
    • LoopForm v2 / LoopSSA v2 の整備と Exit PHI / ExitLiveness まわりの 4 箱構成。
  • Phase 2732 — JoinIR 初期実験〜汎用化
    • LoopToJoinLowerer / LoopScopeShape / JoinIR VM Bridge を minimal ケースから Stage1 / StageB へ広げていくライン。
    • docs: docs/private/roadmap2/phases/phase-27-joinir*, phase-31-looptojoin-lowerer, phase-32-joinir-complete-migration など。

CURRENT_TASK.md 自体は「いまどこを触っているか」と「次に何をやるか」を
1 画面で把握できる軽さを維持する方針だよ。***