Files
hakorune/docs/development/current/main/phase84-case-d-summary.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

4.5 KiB
Raw Blame History

Phase 84: Case D 分析サマリー(エグゼクティブサマリー)

TL;DR

現状: 9 件の Case D 失敗Phase 83 + Phase 84-1 + Phase 84-2 実装後)

主要原因: PHI 経由の複雑な edge パターンawait/try-catch、多段 PHI チェーンなど)

対応状況:

  • Phase 83: MethodReturnHintBoxP3-D実装で 20 件 → 15 件
  • Phase 84-1: Const 命令型アノテーション追加で 15 件 → 12 件
  • Phase 84-2: CopyTypePropagator 導入で 12 件 → 9 件

残タスク: PHI 推論強化Phase 84-3、PhiTypeResolverと if_phi フォールバック縮退


問題の核心

現在の実装(バグ)

// Integer/Bool/Float/Null/Void は型を登録しない
pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
    let dst = b.next_value_id();
    b.emit_instruction(MirInstruction::Const {
        dst,
        value: ConstValue::Integer(val),
    });
    dst  // ← value_types に何も登録していない!
}

修正版

pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
    let dst = b.next_value_id();
    b.emit_instruction(MirInstruction::Const {
        dst,
        value: ConstValue::Integer(val),
    });
    b.value_types.insert(dst, MirType::Integer);  // ← この1行を追加
    dst
}

同様の修正を emit_bool/emit_float/emit_null/emit_void にも適用


影響範囲

修正されるテスト(推定 14-16 件)

  • mir_locals_uninitialized - return 0 の型
  • mir_stageb_like_*_verifies (7件) - 全て return 系
  • mir_stage1_cli_entry_like_pattern_verifies - return 系
  • 他の return リテラルを含むテスト

残存する問題8-10 件)

  • Copy命令型伝播不足 (6-8件) - Loop/If の edge copy
  • PHI型推論限界 (2-4件) - Await/Try-Catch/複雑な制御フロー

実装計画

Phase 84-1: Const命令型アテーション完了

Status: 実装完了40dfbc68

ファイル: src/mir/builder/emission/constant.rs

変更箇所: 5 関数 × 1 行 = 5 行追加

効果: Case D が 15 件 → 12 件Const 欠如グループは解消)

所要時間: 1-2 時間(テスト含む)

リスク: 極めて低いString は既に実装済み)

Phase 84-2: Copy命令型伝播完了

Status: 実装完了CopyTypePropagator 導入)

ファイル:

  • src/mir/phi_core/copy_type_propagator.rs(新規箱)
  • src/mir/phi_core/mod.rs
  • src/mir/builder/lifecycle.rs

内容:

  • CopyTypePropagator が MIR 関数内の Copy { dst, src } を固定点ループで走査し、 value_types[src] の型を value_types[dst] に伝播Unknown のみ上書き)。
  • finalize_module 内で return 型推論の前に実行。

効果:

  • ベースラインテスト: 489 passed, 34 failed → 494 passed, 33 failed+5/-1
  • Case D: 12 件 → 9 件(約 25% 削減)。

箱理論チェック:

  • 単一責務Copy の型伝播のみ)、副作用は value_types 更新に限定、PHI/JoinIR には非依存。

Phase 84-3: PHI型推論強化長期

期待効果: Case D が 2-4件 → 0件完全解決

所要時間: 要検討(複雑度による)

リスク: 高(再帰的解析のパフォーマンス)


推奨アクション

  1. Phase 84-1 は完了済み

    • Const 命令の型アノテーション欠如グループは解消済み。
  2. Phase 84-2 も完了済み

    • Copy チェーンだけで説明できる Case D は削減済みで、残りは PHI 主体の複雑ケースに集中。
  3. Phase 84-3 は「PHI 強化」を必要最小限で検討

    • Await/Try-Catch や多段 PHI チェーンなど、本当に必要なパターンだけを PhiTypeResolver で扱う。

期待される最終結果

Phase Case D 件数 修正率 備考
Phase 82 終了時 20 件 - lifecycle 修正後
Phase 83 後 15 件 25% MethodReturnHintBoxP3-D
Phase 84-1 後 12 件 40% Const 型アノテーション
Phase 84-2 後 9 件 55% CopyTypePropagator
Phase 84-3 後(目標) 0-2 件 80-100% PhiTypeResolver必要最小限

最終目標: Case D を 0-2 件まで縮小し、infer_type_from_phi* を本線から外せる状態にする。


詳細分析

完全な分析レポートは以下を参照: