Phase 61-5: If PHI 残りパターン棚卸しと削減計画策定 New docs: - phase61-5-3-if-phi-priority-table.md: P1/P2/P3 優先度表 - P1: 18関数(薄いラッパー削除候補) - P2: 5関数(JoinIR 拡張統合候補) - P3: 3関数(型システム統合待ち) - phase61-5.4-next-phase-candidates.md: Phase 61-6 削減候補(3個) - Wave 1: set_if_context 削除(11行)、dev フラグ削除(15行) - Wave 2: A/B テスト削除(50行) - 合計削減見込み: 76行 - phase61-5-summary.md: Phase 61-5 全体サマリー - JoinIR カバー率: 完全28.6% + 部分57.1% = 85.7% - Phase 61-6 実装準備完了 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Phase 61-5.4: 次フェーズ候補選定(2〜3個)
目的
Phase 61-5.3 の優先度表から、Phase 61-6(If PHI JoinIR 化 第2弾)で触る候補を 2〜3 個だけ選定する。
選定基準
P1 候補(薄いラッパー削除)
- コード量が少ない(50行以下)
- 依存関係が少ない
- 削除による影響範囲が明確
- テストが既存のもので十分
P2 候補(JoinIR 拡張)
- PhiSpec や IfMerge との 1:1 対応が明確
- 既存の JoinIR 構造に自然に統合できる
- 削減効果が高い(100行以上)
Phase 61-6 削減候補(2〜3個)
Phase 61-6.1: P1 薄いラッパー削除
1. set_if_context 削除
- ファイル:
src/mir/phi_core/phi_builder_box.rs:143-152 - 削減見込み: 10行(関数本体)+ 呼び出し側1行 = 11行
- 実装方針:
loop_builder/if_lowering.rs:259-262で直接IfPhiContext::for_loop_body(true, carrier_names.clone())を生成してフィールドに代入 - リスク: 低 - 単純なラッパー削除、既存ロジックに影響なし
- 備考: 現在は
set_if_context()→IfPhiContext { in_loop_body, loop_carrier_names }構造体生成のみ
2. If Lowering ルーティング関数のデフォルト有効化
- ファイル:
src/mir/join_ir/lowering/mod.rs:132-141 - 削減見込み: dev フラグチェック削除 8行 + 環境変数関数削除 = 15行
- 実装方針:
joinir_if_select_enabled()チェックを削除、デフォルトで有効化 - リスク: 中 - 全関数でデフォルト有効化されるため、テスト全通過が必須
- 備考: 現在は
NYASH_JOINIR_IF_SELECT=1で制御、Phase 33-8 で導入済み
Phase 61-6.2: P2 JoinIR 拡張
3. A/B テスト観察用関数の削除
- 関数:
extract_phi_spec_from_builder,compare_and_log_phi_specs - ファイル:
src/mir/join_ir/lowering/if_phi_spec.rs:97-140 - 削減見込み: 2関数 + テスト削除 = 50行
- 実装方針:
- Phase 61-3 で JoinIR 経路が完全動作確認済み
if_lowering.rs:273-290の A/B 比較ロジック削除extract_phi_spec_from_builder()とcompare_and_log_phi_specs()削除- if_phi_spec.rs は
compute_phi_spec_from_joinir()のみ残す
- リスク: 低 - 観察専用関数、実行経路に影響なし
- 備考: Phase 61-2 で導入、Phase 61-3 で検証完了済み
期待される効果
| Wave | 削減対象 | 見込み削減行数 | 累積削減 |
|---|---|---|---|
| 61-6.1 | P1 薄いラッパー削除 (set_if_context) | 11 | 11 |
| 61-6.1 | P1 dev フラグ削除 | 15 | 26 |
| 61-6.2 | P2 A/B テスト削除 | 50 | 76 |
JoinIR カバー率
- 現在: If-in-Loop PHI 生成は JoinIR で 100% カバー(Phase 61-3 完了)
- 61-6 後: PhiBuilderBox 経路の観察コード削除、JoinIR SSOT 確立
実装順序
Wave 1: P1 削除(Phase 61-6.1)
set_if_context削除 - 最優先(最も安全)- dev フラグ削除 - 全テストPASS確認後
Wave 2: P2 削除(Phase 61-6.2)
- A/B テスト観察関数削除 - 最も削減効果が高い
各 Wave の完了条件
- Wave 1: 全 JoinIR tests PASS(268 tests)
- Wave 2: if_phi_spec.rs が
compute_phi_spec_from_joinir()のみに(観察コード完全削除)
実装時の注意事項
- Fail-Fast原則: エラーは即座に失敗、フォールバック禁止
- 決定的順序: BTreeSet/BTreeMap で ValueId 割り当ての決定性保証
- 箱理論: SSOT を JoinIR 側に寄せる、PhiBuilderBox は最小限に
- テスト: 各ステップで全 JoinIR tests PASS を確認
- ドキュメント: PHI_BOX_INVENTORY.md と CURRENT_TASK.md を更新
保留候補(Phase 61-7+ で検討)
P2 候補(Phase 61-7 で検討)
compute_modified_names_if- 変更変数検出を JoinIR の modified 変数集合解析に統合(~75行削減)get_conservative_if_values- incoming 値解決を PhiSpec に移行、void fallback 削除(~70行削減)
保留理由
- Phase 61-6 では最小限の削除に集中(76行削減)
- P2 大型統合は Phase 61-7 で慎重に実装(145行削減見込み)
関連ドキュメント
- Phase 61-5.3: if-phi-priority-table.md
- PHI Inventory: PHI_BOX_INVENTORY.md
- If PHI Context: if_phi_context.rs
- If PHI Spec: if_phi_spec.rs