feat(joinir): Phase 61-4-D/E function guard and toplevel emitter
Phase 61-4 追加実装: 1. Phase 61-4-D: 関数名ガード整理 - is_joinir_if_toplevel_target() ヘルパー追加 - IfSelectTest.*, IfToplevelTest.*, IfMergeTest.* 対応 - if_form.rs で関数名チェック統合 2. Phase 61-4-E: emit_toplevel_phis() 追加 - IfInLoopPhiEmitter に toplevel 用メソッド追加 - carrier_names 不要(PhiSpec の全変数を対象) - HAKO_JOINIR_IF_TOPLEVEL_TRACE でトレース可能 現状: - dry-run モードでパターンマッチング確認可能 - 本番経路のPHI生成統合は次フェーズ(MirBuilder PHI emit 方式検討必要) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -79,6 +79,36 @@ pub(crate) fn is_loop_lowered_function(name: &str) -> bool {
|
||||
LOOP_LOWERED_FUNCTIONS.contains(&name)
|
||||
}
|
||||
|
||||
/// Phase 61-4: ループ外 If の JoinIR 対象関数判定
|
||||
///
|
||||
/// HAKO_JOINIR_IF_TOPLEVEL=1 有効時に、ループ外 if の JoinIR 経路を試行する関数。
|
||||
/// 段階的に対象を拡大するため、最小限のホワイトリストから開始。
|
||||
///
|
||||
/// ## 対象関数
|
||||
/// - IfSelectTest.*: テスト専用関数群
|
||||
/// - IfToplevelTest.*: ループ外 if テスト専用(Phase 61-4)
|
||||
/// - JsonShapeToMap._read_value_from_pair/1: Phase 33-4 で検証済み
|
||||
///
|
||||
/// ## 使用方法
|
||||
/// if_form.rs から呼び出され、関数名がホワイトリストに含まれる場合のみ
|
||||
/// JoinIR 経路を試行する。
|
||||
pub fn is_joinir_if_toplevel_target(name: &str) -> bool {
|
||||
// Test prefixes (always enabled)
|
||||
if name.starts_with("IfSelectTest.")
|
||||
|| name.starts_with("IfToplevelTest.")
|
||||
|| name.starts_with("IfMergeTest.")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Explicit approvals (Phase 33-4 verified)
|
||||
matches!(
|
||||
name,
|
||||
"JsonShapeToMap._read_value_from_pair/1"
|
||||
| "Stage1JsonScannerBox.value_start_after_key_pos/2"
|
||||
)
|
||||
}
|
||||
|
||||
/// Phase 33-7: Try to lower if/else to JoinIR Select/IfMerge instruction
|
||||
///
|
||||
/// Scope:
|
||||
|
||||
Reference in New Issue
Block a user