Files
hakorune/docs/development/current/main/phase84-case-d-index.md
nyash-codex 4ef5eec162 feat(mir): Phase 84-2 CopyTypePropagator for Copy chain type propagation
- Add CopyTypePropagator box (ChatGPT Pro design) for fixed-point
  Copy instruction type propagation
- Integrate into lifecycle.rs before return type inference
- Case D reduced from 12 to 9 (25% reduction)

Implementation:
- src/mir/phi_core/copy_type_propagator.rs: New box with fixed-point loop
- src/mir/phi_core/mod.rs: Add module export
- src/mir/builder/lifecycle.rs: Call propagator before return inference

Test results:
- Baseline: 494 passed, 33 failed (was 489/34)
- Case D: 9 remaining (from 12)
- Unit tests: 4/4 passed

Remaining 9 Case D breakdown:
- GroupA: Loop Edge Copy (7 cases) - PHI incoming needs Copy trace
- GroupB: Multi-level PHI (2 cases) - Recursive PHI resolution needed

Phase 84-3 will address GroupA with Edge Copy tracing in GenericTypeResolver.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 19:37:01 +09:00

7.1 KiB
Raw Blame History

Phase 84: Case D 完全解決ロードマップ

現在の状況

Phase 84-2 完了: 12件 → 9件25%削減)
残り: 9件

内訳:
- GroupA (Loop 制御フロー): 7件
- GroupB (多段 PHI): 2件
- GroupC (await 特殊): 1件

ドキュメント一覧

📊 サマリー

📖 詳細分析

🔧 実装資料

クイックリンク

🎯 次のタスク

Phase 84-3: Edge Copy 追跡 PHI 型推論

  • 目標: GroupA の 7件を解決
  • 期待: 9件 → 2件78%削減)
  • 期間: 1-2日

実装内容:

// GenericTypeResolver に追加
pub fn resolve_from_phi_with_copy_trace(
    function: &MirFunction,
    ret_val: ValueId,
    types: &BTreeMap<ValueId, MirType>,
) -> Option<MirType> {
    // PHI の incoming 値から Copy を遡る
    for (_, incoming_val) in phi_inputs {
        if let Some(src) = find_copy_src(function, incoming_val) {
            if let Some(ty) = types.get(&src) {
                return Some(ty.clone());
            }
        }
    }
    None
}

🧪 テスト実行

# 全 Case D 確認
NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D"

# GroupA のみ
cargo test --release --lib loop_continue_break
cargo test --release --lib loop_nested
cargo test --release --lib loop_return
cargo test --release --lib vm_exec_break

# GroupB のみ
cargo test --release --lib mir_stage1_cli

# GroupC のみ
cargo test --release --lib test_lowering_await

完了条件

Phase 84-3 完了

NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 2 (GroupB のみ残存)

Phase 84-4 完了

NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 1 (GroupC のみ残存)

Phase 84-5 完了

NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D"
# 期待: 出力なし0件

cargo test --release --lib
# 期待: test result: ok

タイムライン

Phase 目標 期間 削減数 残存数
84-1 PHI Fallback 無効化テスト 完了 - 12件
84-2 CopyTypePropagator 実装 完了 3件 9件
84-3 Edge Copy 追跡 PHI 型推論 1-2日 7件 2件
84-4 多段 PHI 型推論 1-2日 2件 1件
84-5 await 暫定対応 30分 1件 0件

合計: 2-4日で Case D 完全解決見込み

グループ別詳細

GroupA: Loop 制御フロー PHI7件

パターン: Loop + continue/break による Edge Copy 合流

テスト一覧:

  1. loop_with_continue_and_break_edge_copy_merge (ValueId 56)
  2. nested_loop_with_multi_continue_break_edge_copy_merge (ValueId 135)
  3. loop_inner_if_multilevel_edge_copy (ValueId 74)
  4. loop_break_and_early_return_edge_copy (ValueId 40)
  5. vm_exec_break_inside_if (ValueId 27)
  6. loop_if_three_level_merge_edge_copy (ValueId 75)
  7. 7件合計

解決策: Edge Copy 追跡 PHI 型推論Phase 84-3

詳細: 失敗パターン - GroupA

GroupB: 多段 PHI 型推論2件

パターン: 複数の PHI 命令が連鎖

テスト一覧:

  1. mir_stage1_cli_emit_program_min_exec_hits_type_error (ValueId 7)
  2. mir_stage1_cli_emit_program_min_compiles_and_verifies (ValueId 7)

解決策: 再帰的 PHI 型推論Phase 84-4

詳細: 失敗パターン - GroupB

GroupC: await 特殊パターン1件

パターン: await 式の MIR lowering

テスト:

  1. test_lowering_await_expression (ValueId 2)

解決策: await 特殊ケース処理Phase 84-5

詳細: 失敗パターン - GroupC

ChatGPT Pro 設計相談ポイント

相談1: Edge Copy 追跡の最適化

  • Copy チェーンの追跡深度は 10 で十分か?
  • 循環 Copy 検出は必要か?
  • パフォーマンス最適化(キャッシュ戦略)

相談2: 多段 PHI の循環検出

  • 循環 PHI は実際に発生するか?
  • 発生する場合の処理方法(エラー or Unknown
  • visited セットの最適なデータ構造

相談3: await 型推論の長期戦略

  • Phase 67+ async/await システムの型推論設計
  • Safepoint/Checkpoint 命令の型情報統合方法
  • 現在の暫定対応が将来の実装を妨げないか

実装チェックリスト

Phase 84-3: Edge Copy 追跡

  • GenericTypeResolver::resolve_from_phi_with_copy_trace() 実装
  • find_copy_src() ヘルパー関数実装
  • trace_copy_chain() ヘルパー関数実装
  • lifecycle.rs 統合371行目付近
  • テスト実行: GroupA の 7件を確認
  • ドキュメント更新

Phase 84-4: 多段 PHI 推論

  • GenericTypeResolver::resolve_from_phi_recursive() 実装
  • 循環検出ロジック実装HashSet
  • lifecycle.rs 統合
  • テスト実行: GroupB の 2件を確認
  • ドキュメント更新

Phase 84-5: await 暫定対応

  • lifecycle.rs に await 特殊ケース追加
  • テスト実行: GroupC の 1件を確認
  • ドキュメント更新
  • Phase 67+ 長期計画メモ作成

関連リソース

過去の分析

実装ファイル

  • src/mir/phi_core/copy_type_propagator.rs - Phase 84-2 実装
  • src/mir/join_ir/lowering/generic_type_resolver.rs - 拡張予定
  • src/mir/builder/lifecycle.rs - 型推論統合箇所371行目

テストファイル

  • src/tests/loop_continue_break_no_phi_tests.rs - GroupA-1
  • src/tests/loop_nested_no_phi_tests.rs - GroupA-2,3
  • src/tests/loop_return_no_phi_tests.rs - GroupA-4,6
  • src/tests/mir_ctrlflow_break_continue.rs - GroupA-5
  • src/tests/mir_stage1_cli_emit_program_min.rs - GroupB
  • src/mir/mod.rs:363 - GroupC

まとめ

Phase 84-2 の CopyTypePropagator により 12件 → 9件に削減成功。 残り 9件は 3つのパターンに分類され、各々に明確な解決策が提案済み。

Phase 84-3/4/5 の実装により、Case D を完全解決 できる見込み。


次のアクション: Phase 84-3 の Edge Copy 追跡 PHI 型推論を実装