diff --git a/src/mir/join_ir/lowering/if_phi_spec.rs b/src/mir/join_ir/lowering/if_phi_spec.rs index c4747106..2d691eba 100644 --- a/src/mir/join_ir/lowering/if_phi_spec.rs +++ b/src/mir/join_ir/lowering/if_phi_spec.rs @@ -4,8 +4,8 @@ use crate::mir::join_ir::lowering::if_phi_context::IfPhiContext; use crate::mir::join_ir::JoinInst; -use crate::mir::ValueId; -use std::collections::{BTreeMap, BTreeSet}; +// Phase 61-6.2: ValueId, BTreeMap 削除(A/B観察関数削除で不要に) +use std::collections::BTreeSet; /// PHI仕様(どの変数がPHIを持つべきか) #[derive(Debug, Clone, PartialEq, Eq)] @@ -82,62 +82,13 @@ pub fn compute_phi_spec_from_joinir(ctx: &IfPhiContext, join_inst: &JoinInst) -> spec } -/// PhiBuilderBoxから実際に生成されたPHI仕様を取得 -/// -/// # Arguments -/// -/// * `pre_if_var_map` - If前の変数マップ -/// * `post_snapshots` - If後のスナップショット -/// * `carrier_names` - ループキャリア変数名 -/// -/// # Note -/// -/// Phase 61-2では、PhiBuilderBox経路で実際に生成されたPHIを観察する。 -/// Phase 61-3で、このロジックがJoinIR経路に置き換わる。 -pub fn extract_phi_spec_from_builder( - pre_if_var_map: &BTreeMap, - _post_snapshots: &[BTreeMap], - carrier_names: &BTreeSet, -) -> PhiSpec { - let mut spec = PhiSpec::new(); - - // carrier_namesに含まれる変数をPHI候補として扱う - for var_name in carrier_names { - if pre_if_var_map.contains_key(var_name) { - spec.header_phis.insert(var_name.clone()); - } - } - - // Exit PHIは別途計算が必要(Phase 61-3で詳細実装) - // 現状はheader PHIのみを比較対象とする - - spec -} - -/// 2つのPhiSpecを比較し、結果をログ出力 -/// -/// # Returns -/// -/// true if specs match, false otherwise -pub fn compare_and_log_phi_specs(joinir_spec: &PhiSpec, builder_spec: &PhiSpec) -> bool { - let matches = joinir_spec.matches(builder_spec); - - if matches { - eprintln!("[Phase 61-2] ✅ PHI spec matches!"); - eprintln!("[Phase 61-2] Header PHIs: {}", joinir_spec.header_count()); - eprintln!("[Phase 61-2] Exit PHIs: {}", joinir_spec.exit_count()); - } else { - eprintln!("[Phase 61-2] ❌ PHI spec mismatch detected!"); - eprintln!("[Phase 61-2] JoinIR spec:"); - eprintln!("[Phase 61-2] Header: {:?}", joinir_spec.header_phis); - eprintln!("[Phase 61-2] Exit: {:?}", joinir_spec.exit_phis); - eprintln!("[Phase 61-2] PhiBuilderBox spec:"); - eprintln!("[Phase 61-2] Header: {:?}", builder_spec.header_phis); - eprintln!("[Phase 61-2] Exit: {:?}", builder_spec.exit_phis); - } - - matches -} +// Phase 61-6.2: A/B観察関数削除(JoinIR経路完全動作確認済み) +// +// 削除された関数: +// - extract_phi_spec_from_builder(): PhiBuilderBox経路の観察用 +// - compare_and_log_phi_specs(): A/B比較ログ出力 +// +// SSOT確立: compute_phi_spec_from_joinir() のみが PHI 仕様の計算ロジック #[cfg(test)] mod tests { diff --git a/src/mir/loop_builder/if_lowering.rs b/src/mir/loop_builder/if_lowering.rs index b887f609..00d860a8 100644 --- a/src/mir/loop_builder/if_lowering.rs +++ b/src/mir/loop_builder/if_lowering.rs @@ -268,31 +268,9 @@ impl<'a> LoopBuilder<'a> { }; phi_builder.generate_phis(&mut ops, &form, &pre_if_var_map, &post_snapshots)?; - // Phase 61-2: A/B比較(JoinIR vs PhiBuilderBox) - if crate::config::env::joinir_if_in_loop_dryrun_enabled() { - if let Some(ref joinir_spec) = joinir_phi_spec_opt { - // PhiBuilderBox経路でのPhiSpecを抽出 - let builder_spec = - crate::mir::join_ir::lowering::if_phi_spec::extract_phi_spec_from_builder( - &pre_if_var_map, - &post_snapshots, - &carrier_names, - ); - - eprintln!( - "[Phase 61-2] PhiBuilderBox PhiSpec: header={}, exit={}", - builder_spec.header_count(), - builder_spec.exit_count() - ); - - // A/B比較実行 - let _matches = - crate::mir::join_ir::lowering::if_phi_spec::compare_and_log_phi_specs( - joinir_spec, - &builder_spec, - ); - } - } + // Phase 61-6.2: A/B比較削除(JoinIR経路完全動作確認済み) + // Phase 61-3でJoinIR経路が完全動作したため、観察コード削除 + // SSOT: JoinIR → compute_phi_spec_from_joinir() } // Phase 26-E-4: PHI生成後に variable_map をリセット(ChatGPT/Task先生指示)