feat(joinir): Phase 61-3 devフラグ・if_phi_context拡張準備

Phase 61-3(If-in-loop JoinIR本番切り替え)の基盤準備:

- env.rs: joinir_if_in_loop_enable() 追加
  - HAKO_JOINIR_IF_IN_LOOP_ENABLE=1 で本番経路有効化
  - デフォルトOFF(安全第一)

- if_phi_context.rs: Phase 61-3拡張準備
  - BTreeMap, ValueId, BasicBlockId import追加
  - ドキュメント更新(incoming値解決メソッド予告)

設計書: docs/private/.../phase61-3-box-design.md(別途)

🤖 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:19:53 +09:00
parent 7a1a4bd964
commit f4fb798ec8
2 changed files with 24 additions and 1 deletions

View File

@ -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=1Phase 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).

View File

@ -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)]