diff --git a/src/mir/loop_builder/if_lowering.rs b/src/mir/loop_builder/if_lowering.rs index dba0179e..b887f609 100644 --- a/src/mir/loop_builder/if_lowering.rs +++ b/src/mir/loop_builder/if_lowering.rs @@ -253,13 +253,12 @@ impl<'a> LoopBuilder<'a> { if !joinir_success { // Phase 26-E: PhiBuilderBox SSOT統合(If PHI生成) // Legacy: merge_modified_with_control() → New: PhiBuilderBox::generate_phis() + // Phase 61-6.1: set_if_context削除、直接IfPhiContextを生成 let mut phi_builder = crate::mir::phi_core::phi_builder_box::PhiBuilderBox::new(); - - // Phase 26-F-3: ループ内if-mergeコンテキスト設定(ChatGPT設計) - phi_builder.set_if_context( - true, // in_loop_body = true - carrier_names.clone(), - ); + phi_builder.if_context = Some(crate::mir::phi_core::phi_builder_box::IfPhiContext { + in_loop_body: true, + loop_carrier_names: carrier_names.clone(), + }); // Phase 35-5: if_body_local_merge.rs削除、ロジックはPhiBuilderBox内に統合 let post_snapshots = if let Some(ref else_map) = else_var_map_end_opt { diff --git a/src/mir/phi_core/phi_builder_box.rs b/src/mir/phi_core/phi_builder_box.rs index f167e8b1..7166bd3c 100644 --- a/src/mir/phi_core/phi_builder_box.rs +++ b/src/mir/phi_core/phi_builder_box.rs @@ -20,7 +20,7 @@ //! # Phase 36 Responsibility Classification //! //! ## Loop-only methods (if-in-loop PHI) -//! - `set_if_context()`: Set loop context for if-in-loop PHI generation +//! - (Phase 61-6.1: set_if_context削除、if_context直接代入に) //! //! ## If-only methods (Phase 37 target) //! - `generate_if_phis()`: Generate If PHI nodes @@ -72,7 +72,8 @@ use std::collections::BTreeMap; /// - **ピュア関数的**: 入力 → PHI生成 → 出力(副作用最小化) pub struct PhiBuilderBox { /// If PHI生成時のコンテキスト(将来拡張用) - if_context: Option, + /// Phase 61-6.1: pub化(set_if_context削除、直接代入可能に) + pub if_context: Option, // Phase 30: loop_context 削除(完全未使用、将来 JoinIR で代替予定) } @@ -114,42 +115,16 @@ impl PhiBuilderBox { Self { if_context: None } } - /// Phase 26-F-3: ループ内if-mergeコンテキストを設定 - /// - /// # Responsibility: Loop-only (if-in-loop PHI) - /// - /// This method is ONLY called from loop_builder.rs for if-in-loop PHI generation. - /// It sets the loop context (carrier variable names) for proper PHI generation - /// in "片腕のみの変数" cases (e.g., `if i >= n { break }`). - /// - /// ## Phase 36 Scope - /// - Called via loop_builder.rs directly (no wrapper needed) - /// - Minimal indirection for performance - /// - /// ## Phase 37+ Consideration - /// - May be internalized when loop-in-loop PHI is refactored - /// - Consider merging with IfPhiContext initialization - /// - /// # Arguments - /// - `in_loop_body`: ループbody内のif-mergeか - /// - `loop_carrier_names`: ループキャリア変数名(Pinned + Carrier) - /// - /// # Usage (LoopBuilder側で呼ぶ) - /// ```ignore - /// let mut phi_builder = PhiBuilderBox::new(); - /// phi_builder.set_if_context(true, carrier_names_set); - /// phi_builder.generate_phis(...); - /// ``` - pub fn set_if_context( - &mut self, - in_loop_body: bool, - loop_carrier_names: std::collections::BTreeSet, - ) { - self.if_context = Some(IfPhiContext { - in_loop_body, - loop_carrier_names, - }); - } + // Phase 61-6.1: set_if_context() 削除(薄いラッパー) + // 呼び出し側(loop_builder/if_lowering.rs)で直接 IfPhiContext を生成 + // + // Before: + // phi_builder.set_if_context(true, carrier_names.clone()); + // After: + // phi_builder.if_context = Some(IfPhiContext { + // in_loop_body: true, + // loop_carrier_names: carrier_names.clone(), + // }); // Phase 26-F-2: set_body_local_filter() 削除 // Phase 35-5: if_body_local_merge.rs削除、ロジックをcompute_modified_names_if()内に直接実装