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

238 lines
7.1 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.

# Phase 84: Case D 完全解決ロードマップ
## 現在の状況
```
Phase 84-2 完了: 12件 → 9件25%削減)
残り: 9件
内訳:
- GroupA (Loop 制御フロー): 7件
- GroupB (多段 PHI): 2件
- GroupC (await 特殊): 1件
```
## ドキュメント一覧
### 📊 サマリー
- **[Phase 84-2 サマリー](./phase84-2-summary.md)** - 実装完了報告と次のステップ
- **[Phase 84-2 テスト一覧](./phase84-2-test-list.md)** - クイックリファレンス表
### 📖 詳細分析
- **[Phase 84-2 詳細調査](./phase84-2-case-d-investigation.md)** - 9件の分類と解決策提案
- **[Phase 84-2 失敗パターン](./phase84-2-failure-patterns.md)** - 各パターンのコード例と MIR 構造
### 🔧 実装資料
- **[CopyTypePropagator 実装](../../../src/mir/phi_core/copy_type_propagator.rs)** - Phase 84-2 で実装
- **[GenericTypeResolver](../../../src/mir/join_ir/lowering/generic_type_resolver.rs)** - Phase 84-3/4 で拡張予定
- **[lifecycle.rs](../../../src/mir/builder/lifecycle.rs)** - 型推論統合箇所
## クイックリンク
### 🎯 次のタスク
**Phase 84-3: Edge Copy 追跡 PHI 型推論**
- 目標: GroupA の 7件を解決
- 期待: 9件 → 2件78%削減)
- 期間: 1-2日
**実装内容**:
```rust
// 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
}
```
### 🧪 テスト実行
```bash
# 全 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 完了
```bash
NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 2 (GroupB のみ残存)
```
### Phase 84-4 完了
```bash
NYASH_PHI_FALLBACK_DISABLED=1 cargo test --release --lib 2>&1 | grep "Case D" | wc -l
# 期待: 1 (GroupC のみ残存)
```
### Phase 84-5 完了
```bash
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](./phase84-2-failure-patterns.md#groupa-loop-制御フロー-phi7件)
### 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](./phase84-2-failure-patterns.md#groupb-多段-phi-型推論2件)
### GroupC: await 特殊パターン1件
**パターン**: await 式の MIR lowering
**テスト**:
1. `test_lowering_await_expression` (ValueId 2)
**解決策**: await 特殊ケース処理Phase 84-5
**詳細**: [失敗パターン - GroupC](./phase84-2-failure-patterns.md#groupc-await-特殊パターン1件)
## 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<ValueId>
- [ ] lifecycle.rs 統合
- [ ] テスト実行: GroupB の 2件を確認
- [ ] ドキュメント更新
### Phase 84-5: await 暫定対応
- [ ] lifecycle.rs に await 特殊ケース追加
- [ ] テスト実行: GroupC の 1件を確認
- [ ] ドキュメント更新
- [ ] Phase 67+ 長期計画メモ作成
## 関連リソース
### 過去の分析
- [Phase 84-1 Case D 分析](./phase84-case-d-detailed-analysis.md) - 最初の 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-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 型推論を実装