- 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>
7.1 KiB
7.1 KiB
Phase 84: Case D 完全解決ロードマップ
現在の状況
Phase 84-2 完了: 12件 → 9件(25%削減)
残り: 9件
内訳:
- GroupA (Loop 制御フロー): 7件
- GroupB (多段 PHI): 2件
- GroupC (await 特殊): 1件
ドキュメント一覧
📊 サマリー
- Phase 84-2 サマリー - 実装完了報告と次のステップ
- Phase 84-2 テスト一覧 - クイックリファレンス表
📖 詳細分析
- Phase 84-2 詳細調査 - 9件の分類と解決策提案
- Phase 84-2 失敗パターン - 各パターンのコード例と MIR 構造
🔧 実装資料
- CopyTypePropagator 実装 - Phase 84-2 で実装
- GenericTypeResolver - Phase 84-3/4 で拡張予定
- lifecycle.rs - 型推論統合箇所
クイックリンク
🎯 次のタスク
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 制御フロー PHI(7件)
パターン: Loop + continue/break による Edge Copy 合流
テスト一覧:
loop_with_continue_and_break_edge_copy_merge(ValueId 56)nested_loop_with_multi_continue_break_edge_copy_merge(ValueId 135)loop_inner_if_multilevel_edge_copy(ValueId 74)loop_break_and_early_return_edge_copy(ValueId 40)vm_exec_break_inside_if(ValueId 27)loop_if_three_level_merge_edge_copy(ValueId 75)- (7件合計)
解決策: Edge Copy 追跡 PHI 型推論(Phase 84-3)
詳細: 失敗パターン - GroupA
GroupB: 多段 PHI 型推論(2件)
パターン: 複数の PHI 命令が連鎖
テスト一覧:
mir_stage1_cli_emit_program_min_exec_hits_type_error(ValueId 7)mir_stage1_cli_emit_program_min_compiles_and_verifies(ValueId 7)
解決策: 再帰的 PHI 型推論(Phase 84-4)
詳細: 失敗パターン - GroupB
GroupC: await 特殊パターン(1件)
パターン: await 式の MIR lowering
テスト:
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+ 長期計画メモ作成
関連リソース
過去の分析
- Phase 84-1 Case D 分析 - 最初の 12件分析
実装ファイル
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-1src/tests/loop_nested_no_phi_tests.rs- GroupA-2,3src/tests/loop_return_no_phi_tests.rs- GroupA-4,6src/tests/mir_ctrlflow_break_continue.rs- GroupA-5src/tests/mir_stage1_cli_emit_program_min.rs- GroupBsrc/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 型推論を実装