feat(phi): Phase 26-F Step 1 & 3 - BodyLocal if-merge統合(WIP - 過剰フィルタリング発生中)
Step 1完了: - body_local_phi_builder.rs: filter_if_merge_candidates() API追加 - pre_if/then_end/else_end_opt/reachable_preds受け取り - LoopVarClassBox使用して変数分類 Step 3完了: - loop_builder.rs: BodyLocalPhiBuilder作成・PhiBuilderBoxに設定 - phi_builder_box.rs: IfPhiContext拡張・set_body_local_filter()実装 - compute_modified_names_if()でフィルタリング適用 **問題**: LocalScopeInspectorBox空のため全候補フィルタリング(0 candidates) 技術詳細: - inspector定義記録なし → classify誤判定 → 全変数BodyLocalInternal扱い - テスト結果: bb54/bb52→bb38/bb36/bb32(ブロック番号変化=PHI生成影響あり) - mir_stage1_using_resolver_modules_map_continue_break_with_lookup_verifies: PASS - mir_stage1_using_resolver_resolve_with_modules_map_verifies: FAIL(domination error残存) 次のステップ: 1. filter_if_merge_candidates()単純実装(inspector不要) 2. または変数定義トラッキング実装 3. ChatGPT相談推奨
This commit is contained in:
@ -1147,9 +1147,23 @@ impl<'a> LoopBuilder<'a> {
|
||||
|
||||
let mut ops = Ops(self);
|
||||
|
||||
// Phase 26-F: BodyLocalPhiBuilder setup for if-merge PHI filtering
|
||||
// Purpose: Filter out BodyLocalInternal variables (defined in only some branches)
|
||||
let inspector = crate::mir::phi_core::local_scope_inspector::LocalScopeInspectorBox::new();
|
||||
let classifier = crate::mir::phi_core::loop_var_classifier::LoopVarClassBox::new();
|
||||
let body_local_builder =
|
||||
crate::mir::phi_core::body_local_phi_builder::BodyLocalPhiBuilder::new(
|
||||
classifier,
|
||||
inspector,
|
||||
);
|
||||
|
||||
// Phase 26-E: PhiBuilderBox SSOT統合(If PHI生成)
|
||||
// Legacy: merge_modified_with_control() → New: PhiBuilderBox::generate_phis()
|
||||
let mut phi_builder = crate::mir::phi_core::phi_builder_box::PhiBuilderBox::new();
|
||||
|
||||
// Phase 26-F: Set BodyLocal filter for PHI generation
|
||||
phi_builder.set_body_local_filter(body_local_builder);
|
||||
|
||||
let post_snapshots = if let Some(ref else_map) = else_var_map_end_opt {
|
||||
vec![then_var_map_end.clone(), else_map.clone()]
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user