From 80ebec255934ac6ed3b6f2ba70876fb3e8a56bd8 Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Sat, 29 Nov 2025 16:11:39 +0900 Subject: [PATCH] feat(joinir): Phase 61-6.2 Delete A/B test observation code (-71 lines) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 61-6.2 実装完了: A/B 比較観察コード完全削除 ## 変更内容 ### if_phi_spec.rs - ✅ extract_phi_spec_from_builder() 削除(L85-115, 31行) - ✅ compare_and_log_phi_specs() 削除(L117-140, 24行) - ✅ 未使用 import 削除(ValueId, BTreeMap) - ✅ 削除記録コメント追加(L85-91) - ✅ SSOT 確立: compute_phi_spec_from_joinir() のみが PHI 仕様計算 ### if_lowering.rs - ✅ A/B 比較ブロック削除(L271-295, 25行) - ✅ 簡潔な削除理由コメント追加(L271-273) ## 削減効果 - **純削減**: -71 行(予想 -50 行を大幅に上回る) - **SSOT 確立**: JoinIR 経路のみが PHI 計算の責務を持つ - **観察コード完全削除**: PhiBuilderBox 経路の観察用コード根絶 ## テスト結果 - ✅ JoinIR tests 全通過(56 passed) - ✅ ビルド成功(0 error, 0 warning) ## 技術的成果 - Phase 61-3 で JoinIR 経路が完全動作確認済み - A/B 比較は完了、観察用コードは不要に - PhiBuilderBox 経路はフォールバック専用に ## Phase 61-6 総計 - Wave 1: set_if_context 削除(-26 行) - Wave 2: A/B テスト削除(-71 行) - **合計削減**: -97 行(予想 -76 行を 27% 上回る成果) 次: Phase 61-7 or Phase 62 (更なる統合・削除) --- src/mir/join_ir/lowering/if_phi_spec.rs | 67 ++++--------------------- src/mir/loop_builder/if_lowering.rs | 28 ++--------- 2 files changed, 12 insertions(+), 83 deletions(-) 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先生指示)