134 lines
3.5 KiB
Markdown
134 lines
3.5 KiB
Markdown
|
|
# Phase 84: Case D 分析サマリー(エグゼクティブサマリー)
|
|||
|
|
|
|||
|
|
## TL;DR
|
|||
|
|
|
|||
|
|
**現状**: 24件の Case D 失敗(52失敗中)
|
|||
|
|
|
|||
|
|
**主要原因**: **Const命令の型アノテーション欠如** (58-67%)
|
|||
|
|
|
|||
|
|
**解決策**: `constant.rs` の 5 関数に 5 行追加 → 14-16 件修正(1-2時間で完了)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 問題の核心
|
|||
|
|
|
|||
|
|
### ❌ 現在の実装(バグ)
|
|||
|
|
|
|||
|
|
```rust
|
|||
|
|
// 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 に何も登録していない!
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ✅ 修正版
|
|||
|
|
|
|||
|
|
```rust
|
|||
|
|
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命令型アノテーション(最優先)
|
|||
|
|
|
|||
|
|
**ファイル**: `src/mir/builder/emission/constant.rs`
|
|||
|
|
|
|||
|
|
**変更箇所**: 5 関数 × 1 行 = **5 行追加**
|
|||
|
|
|
|||
|
|
**期待効果**: Case D が 24件 → 8-10件(58-67%削減)
|
|||
|
|
|
|||
|
|
**所要時間**: 1-2 時間(テスト含む)
|
|||
|
|
|
|||
|
|
**リスク**: 極めて低い(String は既に実装済み)
|
|||
|
|
|
|||
|
|
### Phase 84-2: Copy命令型伝播(次点)
|
|||
|
|
|
|||
|
|
**ファイル**:
|
|||
|
|
- `src/mir/builder/ssa/local.rs`
|
|||
|
|
- `src/mir/phi_core/loop_phi.rs`
|
|||
|
|
- `src/mir/phi_core/if_phi.rs`
|
|||
|
|
|
|||
|
|
**期待効果**: Case D が 8-10件 → 2-4件(75-80%削減)
|
|||
|
|
|
|||
|
|
**所要時間**: 1-2 日
|
|||
|
|
|
|||
|
|
**リスク**: 中(既存ロジックとの整合性確認)
|
|||
|
|
|
|||
|
|
### Phase 84-3: PHI型推論強化(長期)
|
|||
|
|
|
|||
|
|
**期待効果**: Case D が 2-4件 → 0件(完全解決)
|
|||
|
|
|
|||
|
|
**所要時間**: 要検討(複雑度による)
|
|||
|
|
|
|||
|
|
**リスク**: 高(再帰的解析のパフォーマンス)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 推奨アクション
|
|||
|
|
|
|||
|
|
1. **今すぐ Phase 84-1 を実装する**
|
|||
|
|
- 最小限の変更で最大の効果
|
|||
|
|
- リスクも極めて低い
|
|||
|
|
- 1-2 時間で完了
|
|||
|
|
|
|||
|
|
2. **Phase 84-1 の効果を確認後、Phase 84-2 を検討**
|
|||
|
|
- 残存ケースのパターンを分析
|
|||
|
|
- 必要な箇所にのみ型伝播を追加
|
|||
|
|
|
|||
|
|
3. **Phase 84-3 は本当に必要か検証**
|
|||
|
|
- Await/Try-Catch の型推論を別途対応
|
|||
|
|
- 汎用的な多段 PHI チェーンは後回し
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 期待される最終結果
|
|||
|
|
|
|||
|
|
| 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% | 要検討 |
|
|||
|
|
|
|||
|
|
**最終目標**: テスト成功率 90% → **99-100%**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 詳細分析
|
|||
|
|
|
|||
|
|
完全な分析レポートは以下を参照:
|
|||
|
|
- [phase84-case-d-detailed-analysis.md](./phase84-case-d-detailed-analysis.md)
|