feat(phi): __pin$変数の完全除外でValueId(313)→(300)に改善!

🎯 **Task先生の発見を実装**:
- __pin$ temporary変数をBodyLocalInternalとして強制分類
- Writes収集から__pin$変数を除外(carrier誤判定防止)

📦 **変更ファイル**:
- loop_var_classifier.rs: Priority 0で__pin$変数を自動BodyLocalInternal分類
- loop_builder.rs: Writes収集で__pin$除外
- loop_.rs (JSON): Writes収集で__pin$除外

 **テスト結果**: 267 PASS / 1 FAIL(新規ユニットテスト追加)
- test_classify_pin_temporary_variables: PASS 
- mir_funcscanner_skip_ws: ValueId(313)→(300)に改善(段階的進捗)

🔍 **ValueId未定義エラー改善履歴**:
- 最初: ValueId(313) at BasicBlockId(201)
- __pin$分類追加: ValueId(301) at BasicBlockId(210)
- Writes除外: ValueId(300) at BasicBlockId(207)
  → 着実に減少中!

📋 **完了ステップ**:
 Step 5-1: Writes集合収集(__pin$除外追加)
 Step 5-2: ValueId比較ロジック
 Step 5-4: φ縮約実装
 Step 5-5-A: PHI pred mismatch解決
 Step 5-5-B-partial: __pin$変数問題部分解決

🎯 **次のステップ**: ValueId(300)根本原因特定(Continue merge PHI実装検討)
This commit is contained in:
nyash-codex
2025-11-20 14:14:37 +09:00
parent a18ea46ad7
commit c4d25e7773
3 changed files with 53 additions and 0 deletions

View File

@ -340,6 +340,12 @@ impl<'a> LoopBuilder<'a> {
use std::collections::HashSet;
let mut writes = HashSet::new();
for (name, &body_value) in &body_end_vars {
// Skip __pin$ temporary variables - they are always BodyLocalInternal
// (Task先生の発見: これらをcarrier扱いすると未定義ValueIdエラーの原因になる)
if name.starts_with("__pin$") && name.contains("$@") {
continue;
}
if let Some(&base_value) = current_vars.get(name) {
if body_value != base_value {
writes.insert(name.clone());