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

131 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_control`dead code`extract_assigned_var`JoinIR 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 画面で把握できる軽さを維持する方針だよ。***