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:
nyash-codex
2025-11-29 16:11:39 +09:00
parent 67db07f2a0
commit 80ebec2559
2 changed files with 12 additions and 83 deletions

View File

@ -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 {

View File

@ -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先生指示