feat(joinir): Phase 61-3 IfInLoopPhiEmitter箱実装

If-in-loop PHI生成を箱化モジュール化:

## 新規ファイル
- if_in_loop_phi_emitter.rs: IfInLoopPhiEmitter 箱(~250行)
  - emit_header_phis(): VarLookup方式でPHI生成
  - ユニットテスト2件: basic / same_value

## 変更ファイル
- mod.rs: IfInLoopPhiEmitter モジュール追加・pub use
- if_lowering.rs: Phase 61-3本番経路統合
  - HAKO_JOINIR_IF_IN_LOOP_ENABLE=1 で IfInLoopPhiEmitter 使用
  - JoinIRパターンマッチ成功時のみ動作
- if_phi_context.rs: unused imports削除

## 箱理論
- IfInLoopPhiEmitter: PHI命令発行に専念(Thin Box)
- VarLookup方式: snapshot lookup + pre_val fallback
- CFG非依存: incoming値はsnapshotから直接取得

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-29 14:39:51 +09:00
parent f4fb798ec8
commit 9037467ac7
4 changed files with 349 additions and 12 deletions

View File

@ -27,8 +27,7 @@
//! - carrier_names の判定ユーティリティ提供
//! - Phase 61-3: incoming値解決CFG依存ロジック
use crate::mir::{BasicBlockId, ValueId};
use std::collections::{BTreeMap, BTreeSet};
use std::collections::BTreeSet;
/// If-in-loop 用 PHI コンテキスト
#[derive(Debug, Clone)]