feat(joinir): Phase 61-6.2 Delete A/B test observation code (-71 lines)
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 (更なる統合・削除)
This commit is contained in:
@ -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<String, ValueId>,
|
||||
_post_snapshots: &[BTreeMap<String, ValueId>],
|
||||
carrier_names: &BTreeSet<String>,
|
||||
) -> 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 {
|
||||
|
||||
@ -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先生指示)
|
||||
|
||||
Reference in New Issue
Block a user