feat(phi): Phase 27.4-C - HeaderPhiBuilder bypass for JoinIR experiment

JoinIR 実験経路限定で Header φ 生成をスキップ可能に。

実装内容:
- トグルシステム: joinir_header_bypass_enabled() / is_joinir_header_bypass_target()
- バイパス実装: loop_builder.rs で関数名チェック後に emit_header_phis() をスキップ
- ターゲット関数: Main.skip/1, FuncScannerBox.trim/1 のみ
- テスト更新: JoinIR テストファイルに Phase 27.4-C 対応コメント追加

環境変数:
- NYASH_JOINIR_EXPERIMENT=1 AND NYASH_JOINIR_HEADER_EXP=1 の両方が必要

本線影響: ゼロ(MIR/LoopForm→VM 経路は完全に影響なし)
This commit is contained in:
nyash-codex
2025-11-23 10:08:48 +09:00
parent c7bd5a5465
commit df2248d3c1
5 changed files with 63 additions and 2 deletions

View File

@ -35,6 +35,31 @@ fn joinir_header_experiment_enabled() -> bool {
== Some("1")
}
/// Phase 27.4-C: JoinIR Header φ バイパスが有効かチェック
///
/// 条件: NYASH_JOINIR_EXPERIMENT=1 AND NYASH_JOINIR_HEADER_EXP=1 の両方が必要
///
/// **用途**: JoinIR 実験経路限定で Header φ 生成をスキップする場合に true を返す。
/// 本線MIR/LoopForm→VMには一切影響しない。
pub(crate) fn joinir_header_bypass_enabled() -> bool {
// JoinIR がそもそも実験モードか
let joinir_exp = crate::mir::join_ir::env_flag_is_1("NYASH_JOINIR_EXPERIMENT");
// Header 実験フラグが ON か
let header_exp = joinir_header_experiment_enabled();
joinir_exp && header_exp
}
/// Phase 27.4-C: JoinIR Header φ バイパス対象関数かチェック
///
/// Phase 27.4-C のスコープは以下の 2 関数のみ:
/// - Main.skip/1 (minimal_ssa_skip_ws.hako)
/// - FuncScannerBox.trim/1 (funcscanner_trim_min.hako)
///
/// **重要**: 他の関数では Header φ を絶対にスキップしないこと。
pub(crate) fn is_joinir_header_bypass_target(fn_name: &str) -> bool {
matches!(fn_name, "Main.skip/1" | "FuncScannerBox.trim/1")
}
/// Header PHI生成専門Box
///
/// # Purpose