feat(phi): Phase 47-2 compute_modified_names削除(33行削減)
- if_phi.rs から compute_modified_names を削除 - conservative.rs::ConservativeMerge::analyze 内にロジックをインライン化 - if_phi.rs 累計削減: 348行(Phase 38: 90行, 40-4.1: 35行, 41-1: 99行, 47: 33行) テスト: conservative 3/3 PASS 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -34,7 +34,7 @@
|
||||
//! - Phase 39設計: `docs/.../phase-39-if-phi-level2/joinir_extension_design.md`
|
||||
|
||||
use crate::mir::ValueId;
|
||||
use std::collections::{BTreeMap, HashSet}; // Phase 25.1: BTreeMap化
|
||||
use std::collections::{BTreeMap, BTreeSet, HashSet}; // Phase 25.1: BTreeMap化, Phase 47: BTreeSet追加
|
||||
|
||||
/// Conservative PHI 戦略による変数マージ分析
|
||||
///
|
||||
@ -74,9 +74,29 @@ impl ConservativeMerge {
|
||||
all_vars.extend(else_map.keys().cloned());
|
||||
}
|
||||
|
||||
let changed =
|
||||
crate::mir::phi_core::if_phi::compute_modified_names(pre_if, then_end, else_end_opt);
|
||||
let changed_vars = changed.into_iter().collect();
|
||||
// Phase 47: compute_modified_names インライン化(if_phi.rs から削除)
|
||||
// 決定的順序のためBTreeSet使用
|
||||
let mut names: BTreeSet<&str> = BTreeSet::new();
|
||||
for k in then_end.keys() {
|
||||
names.insert(k.as_str());
|
||||
}
|
||||
if let Some(emap) = else_end_opt.as_ref() {
|
||||
for k in emap.keys() {
|
||||
names.insert(k.as_str());
|
||||
}
|
||||
}
|
||||
let mut changed_vars = HashSet::new();
|
||||
// アルファベット順で決定的にイテレート
|
||||
for &name in &names {
|
||||
let pre = pre_if.get(name);
|
||||
let t = then_end.get(name);
|
||||
let e = else_end_opt.as_ref().and_then(|m| m.get(name));
|
||||
if (t.is_some() && Some(*t.unwrap()) != pre.copied())
|
||||
|| (e.is_some() && Some(*e.unwrap()) != pre.copied())
|
||||
{
|
||||
changed_vars.insert(name.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
Self {
|
||||
all_vars,
|
||||
|
||||
@ -30,19 +30,16 @@
|
||||
* - `merge_with_reset_at_merge_with` (29行) → **削除完了 2025-11-29**
|
||||
* - **理由**: 上記のwrapper、同様にデッドコード
|
||||
*
|
||||
* ## 🔜 Phase 40で削除予定(Level 2-B、56行)
|
||||
* ## ✅ Phase 47で削除済み(Level 2-B、33行)
|
||||
*
|
||||
* - `compute_modified_names` (26行)
|
||||
* - **削除条件**: JoinIR Verifier conservative migration完了
|
||||
* - **置換**: `JoinIrConservativeAnalyzer`
|
||||
* - **callsites**: conservative.rs:78
|
||||
*
|
||||
* - conservative.rs struct inline (30行)
|
||||
* - `compute_modified_names` (33行) → **削除完了 2025-11-29**
|
||||
* - **置換**: conservative.rs::ConservativeMerge::analyze 内にインライン化
|
||||
* - **理由**: callsite 1箇所のみ、if_phi.rs責務縮小
|
||||
*
|
||||
* ## 現在の状態
|
||||
*
|
||||
* - **if_phi.rs**: 451行 → 321行(Phase 41-1後、29%削減)
|
||||
* - **累計削減**: 315行(Phase 38: 90行, Phase 40-4.1: 35行, Phase 41-1: 99行)+ conservative 48行
|
||||
* - **if_phi.rs**: 321行 → 288行(Phase 47後、33行削減)
|
||||
* - **累計削減**: 348行(Phase 38: 90行, Phase 40-4.1: 35行, Phase 41-1: 99行, Phase 47: 33行)+ conservative 48行
|
||||
*
|
||||
* ## 参照ドキュメント
|
||||
*
|
||||
@ -220,70 +217,18 @@ fn extract_vars_from_json_stmt(
|
||||
}
|
||||
}
|
||||
|
||||
/// 保守的修正名前計算
|
||||
///
|
||||
/// Compute the set of variable names whose values changed in either branch
|
||||
/// relative to the pre-if snapshot.
|
||||
///
|
||||
/// # Purpose
|
||||
/// Conservative PHI生成戦略で修正される変数名を計算。
|
||||
/// 非対称分岐(else なし)でのvoid emission用。
|
||||
///
|
||||
/// # Phase 40削減計画
|
||||
///
|
||||
/// - **削除予定**: Phase 40-2(JoinIR Verifier conservative migration後)
|
||||
/// - **置換先**: `JoinIrConservativeAnalyzer`
|
||||
/// - **削除条件**:
|
||||
/// - ✅ ConservativeMerge logic → JoinIR Verifier migration完了
|
||||
/// - ✅ Conservative value propagation in JoinIR実装
|
||||
/// - **callsites**: 1箇所
|
||||
/// - conservative.rs:42 (ConservativeMerge::analyze)
|
||||
/// - **削減効果**: 26行
|
||||
///
|
||||
/// # Migration Path
|
||||
///
|
||||
/// ```rust,ignore
|
||||
/// // Before
|
||||
/// let modified = if_phi::compute_modified_names(if_expr);
|
||||
///
|
||||
/// // After (Phase 40)
|
||||
/// // JoinIR Verifier内でconservative分析
|
||||
/// let analyzer = JoinIrConservativeAnalyzer::new();
|
||||
/// let modified = analyzer.compute_modified_names(join_ir_func);
|
||||
/// ```
|
||||
pub fn compute_modified_names(
|
||||
pre_if_snapshot: &BTreeMap<String, ValueId>,
|
||||
then_map_end: &BTreeMap<String, ValueId>,
|
||||
else_map_end_opt: &Option<BTreeMap<String, ValueId>>,
|
||||
) -> Vec<String> {
|
||||
// TODO(Phase 40-2): JoinIR Verifierに移行予定
|
||||
// JoinIrConservativeAnalyzerに置き換え
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
// 決定的順序のためBTreeSet使用
|
||||
let mut names: BTreeSet<&str> = BTreeSet::new();
|
||||
for k in then_map_end.keys() {
|
||||
names.insert(k.as_str());
|
||||
}
|
||||
if let Some(emap) = else_map_end_opt.as_ref() {
|
||||
for k in emap.keys() {
|
||||
names.insert(k.as_str());
|
||||
}
|
||||
}
|
||||
let mut changed: Vec<String> = Vec::new();
|
||||
// アルファベット順で決定的にイテレート
|
||||
for &name in &names {
|
||||
let pre = pre_if_snapshot.get(name);
|
||||
let t = then_map_end.get(name);
|
||||
let e = else_map_end_opt.as_ref().and_then(|m| m.get(name));
|
||||
if (t.is_some() && Some(*t.unwrap()) != pre.copied())
|
||||
|| (e.is_some() && Some(*e.unwrap()) != pre.copied())
|
||||
{
|
||||
changed.push(name.to_string());
|
||||
}
|
||||
}
|
||||
changed
|
||||
}
|
||||
// ========================================
|
||||
// Phase 47: compute_modified_names削除完了(2025-11-29)
|
||||
// ========================================
|
||||
//
|
||||
// 削除日: 2025-11-29
|
||||
// 削除行数: 33行(関数本体 + docコメント)
|
||||
// 置換先: conservative.rs::ConservativeMerge::analyze 内にインライン化
|
||||
//
|
||||
// 旧関数は以下の理由で削除:
|
||||
// - callsite 1箇所(conservative.rs:78)のみ
|
||||
// - ロジックをconservative.rs内にインライン化完了
|
||||
// - if_phi.rsの責務縮小(JoinIR移行準備)
|
||||
|
||||
/// Operations required for emitting a PHI or direct binding at a merge point.
|
||||
pub trait PhiMergeOps {
|
||||
|
||||
Reference in New Issue
Block a user