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>
This commit is contained in:
@ -2,11 +2,16 @@
|
||||
|
||||
## TL;DR
|
||||
|
||||
**現状**: 24件の Case D 失敗(52失敗中)
|
||||
**現状**: 9 件の Case D 失敗(Phase 83 + Phase 84-1 + Phase 84-2 実装後)
|
||||
|
||||
**主要原因**: **Const命令の型アノテーション欠如** (58-67%)
|
||||
**主要原因**: PHI 経由の複雑な edge パターン(await/try-catch、多段 PHI チェーンなど)
|
||||
|
||||
**解決策**: `constant.rs` の 5 関数に 5 行追加 → 14-16 件修正(1-2時間で完了)
|
||||
**対応状況**:
|
||||
- Phase 83: MethodReturnHintBox(P3-D)実装で 20 件 → 15 件
|
||||
- Phase 84-1: Const 命令型アノテーション追加で 15 件 → 12 件
|
||||
- Phase 84-2: CopyTypePropagator 導入で 12 件 → 9 件
|
||||
|
||||
**残タスク**: PHI 推論強化(Phase 84-3、PhiTypeResolver)と if_phi フォールバック縮退
|
||||
|
||||
---
|
||||
|
||||
@ -62,30 +67,40 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
|
||||
|
||||
## 実装計画
|
||||
|
||||
### Phase 84-1: Const命令型アノテーション(最優先)
|
||||
### Phase 84-1: Const命令型アノテーション(完了)
|
||||
|
||||
**Status**: ✅ 実装完了(40dfbc68)
|
||||
|
||||
**ファイル**: `src/mir/builder/emission/constant.rs`
|
||||
|
||||
**変更箇所**: 5 関数 × 1 行 = **5 行追加**
|
||||
|
||||
**期待効果**: Case D が 24件 → 8-10件(58-67%削減)
|
||||
**効果**: Case D が 15 件 → 12 件(Const 欠如グループは解消)
|
||||
|
||||
**所要時間**: 1-2 時間(テスト含む)
|
||||
|
||||
**リスク**: 極めて低い(String は既に実装済み)
|
||||
|
||||
### Phase 84-2: Copy命令型伝播(次点)
|
||||
### Phase 84-2: Copy命令型伝播(完了)
|
||||
|
||||
**Status**: ✅ 実装完了(CopyTypePropagator 導入)
|
||||
|
||||
**ファイル**:
|
||||
- `src/mir/builder/ssa/local.rs`
|
||||
- `src/mir/phi_core/loop_phi.rs`
|
||||
- `src/mir/phi_core/if_phi.rs`
|
||||
- `src/mir/phi_core/copy_type_propagator.rs`(新規箱)
|
||||
- `src/mir/phi_core/mod.rs`
|
||||
- `src/mir/builder/lifecycle.rs`
|
||||
|
||||
**期待効果**: Case D が 8-10件 → 2-4件(75-80%削減)
|
||||
**内容**:
|
||||
- `CopyTypePropagator` が MIR 関数内の `Copy { dst, src }` を固定点ループで走査し、
|
||||
`value_types[src]` の型を `value_types[dst]` に伝播(Unknown のみ上書き)。
|
||||
- `finalize_module` 内で return 型推論の前に実行。
|
||||
|
||||
**所要時間**: 1-2 日
|
||||
**効果**:
|
||||
- ベースラインテスト: 489 passed, 34 failed → 494 passed, 33 failed(+5/-1)。
|
||||
- Case D: 12 件 → 9 件(約 25% 削減)。
|
||||
|
||||
**リスク**: 中(既存ロジックとの整合性確認)
|
||||
**箱理論チェック**:
|
||||
- 単一責務(Copy の型伝播のみ)、副作用は `value_types` 更新に限定、PHI/JoinIR には非依存。
|
||||
|
||||
### Phase 84-3: PHI型推論強化(長期)
|
||||
|
||||
@ -99,31 +114,28 @@ pub fn emit_integer(b: &mut MirBuilder, val: i64) -> ValueId {
|
||||
|
||||
## 推奨アクション
|
||||
|
||||
1. **今すぐ Phase 84-1 を実装する**
|
||||
- 最小限の変更で最大の効果
|
||||
- リスクも極めて低い
|
||||
- 1-2 時間で完了
|
||||
1. **Phase 84-1 は完了済み**
|
||||
- Const 命令の型アノテーション欠如グループは解消済み。
|
||||
|
||||
2. **Phase 84-1 の効果を確認後、Phase 84-2 を検討**
|
||||
- 残存ケースのパターンを分析
|
||||
- 必要な箇所にのみ型伝播を追加
|
||||
2. **Phase 84-2 も完了済み**
|
||||
- Copy チェーンだけで説明できる Case D は削減済みで、残りは PHI 主体の複雑ケースに集中。
|
||||
|
||||
3. **Phase 84-3 は本当に必要か検証**
|
||||
- Await/Try-Catch の型推論を別途対応
|
||||
- 汎用的な多段 PHI チェーンは後回し
|
||||
3. **Phase 84-3 は「PHI 強化」を必要最小限で検討**
|
||||
- Await/Try-Catch や多段 PHI チェーンなど、本当に必要なパターンだけを PhiTypeResolver で扱う。
|
||||
|
||||
---
|
||||
|
||||
## 期待される最終結果
|
||||
|
||||
| Phase | Case D 件数 | 修正率 | 所要時間 |
|
||||
|-------|------------|--------|---------|
|
||||
| 現在 | 24 件 | 0% | - |
|
||||
| Phase 84-1 後 | 8-10 件 | 58-67% | 1-2 時間 |
|
||||
| Phase 84-2 後 | 2-4 件 | 92-96% | 1-2 日 |
|
||||
| Phase 84-3 後 | 0-2 件 | 92-100% | 要検討 |
|
||||
| Phase | Case D 件数 | 修正率 | 備考 |
|
||||
|-------|------------|--------|-----|
|
||||
| Phase 82 終了時 | 20 件 | - | lifecycle 修正後 |
|
||||
| Phase 83 後 | 15 件 | 25% | MethodReturnHintBox(P3-D) |
|
||||
| Phase 84-1 後 | 12 件 | 40% | Const 型アノテーション |
|
||||
| Phase 84-2 後 | 9 件 | 55% | CopyTypePropagator |
|
||||
| Phase 84-3 後(目標) | 0-2 件 | 80-100% | PhiTypeResolver(必要最小限) |
|
||||
|
||||
**最終目標**: テスト成功率 90% → **99-100%**
|
||||
**最終目標**: Case D を 0-2 件まで縮小し、`infer_type_from_phi*` を本線から外せる状態にする。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user