diff --git a/src/config/env.rs b/src/config/env.rs index 3b1447cc..7da7246f 100644 --- a/src/config/env.rs +++ b/src/config/env.rs @@ -277,6 +277,23 @@ pub fn joinir_if_in_loop_dryrun_enabled() -> bool { env_bool("HAKO_JOINIR_IF_IN_LOOP_DRYRUN") } +/// Phase 61-3: If-in-loop JoinIR本番経路有効化 +/// +/// `HAKO_JOINIR_IF_IN_LOOP_ENABLE=1` でJoinIR本番経路を有効化 +/// +/// 動作: +/// - ON: JoinIR + IfInLoopPhiEmitter経路(PhiBuilderBox不使用) +/// - OFF: PhiBuilderBox経路(既存フォールバック) +/// +/// 前提条件: +/// - NYASH_JOINIR_IF_SELECT=1(Phase 33基盤) +/// - dry-runモードとは独立(HAKO_JOINIR_IF_IN_LOOP_DRYRUN) +/// +/// デフォルト: OFF(安全第一) +pub fn joinir_if_in_loop_enable() -> bool { + env_bool("HAKO_JOINIR_IF_IN_LOOP_ENABLE") +} + // VM legacy by-name call fallback was removed (Phase 2 complete). // Phase 40-4.1: use_joinir_for_array_filter() removed (Route B now default). diff --git a/src/mir/join_ir/lowering/if_phi_context.rs b/src/mir/join_ir/lowering/if_phi_context.rs index 284dafed..cc9d4fc8 100644 --- a/src/mir/join_ir/lowering/if_phi_context.rs +++ b/src/mir/join_ir/lowering/if_phi_context.rs @@ -8,6 +8,10 @@ //! 従来は PhiBuilderBox::set_if_context() で carrier_names を渡していたが、 //! Phase 61-1 で JoinIR 経路に統一するため、この情報を渡す手段が必要。 //! +//! ## Phase 61-3 拡張 +//! +//! incoming 値解決メソッドを追加し、CFG依存ロジックをIfPhiContextに集約。 +//! //! ## 設計 //! //! ``` @@ -21,8 +25,10 @@ //! //! - ループ内 if のコンテキスト情報を保持 //! - carrier_names の判定ユーティリティ提供 +//! - Phase 61-3: incoming値解決(CFG依存ロジック) -use std::collections::BTreeSet; +use crate::mir::{BasicBlockId, ValueId}; +use std::collections::{BTreeMap, BTreeSet}; /// If-in-loop 用 PHI コンテキスト #[derive(Debug, Clone)]