diff --git a/src/mir/builder/control_flow/plan/lowerer.rs b/src/mir/builder/control_flow/plan/lowerer.rs
index 5f072352..703eb1a6 100644
--- a/src/mir/builder/control_flow/plan/lowerer.rs
+++ b/src/mir/builder/control_flow/plan/lowerer.rs
@@ -66,6 +66,7 @@ impl PlanLowerer {
/// Loop: emit blocks, effects, PHI, and edge CFG
///
/// This is pattern-agnostic. All pattern knowledge is in Normalizer.
+ /// Phase 273 P2: Now supports generalized fields with fallback to legacy.
fn lower_loop(
builder: &mut MirBuilder,
loop_plan: CoreLoopPlan,
@@ -80,12 +81,159 @@ impl PlanLowerer {
trace_logger.debug(
"lowerer/loop",
&format!(
- "Phase 273 P1: Lowering CoreLoopPlan for {}",
+ "Phase 273 P2: Lowering CoreLoopPlan for {}",
ctx.func_name
),
);
}
+ // Phase 273 P2: Check if using generalized fields
+ let use_generalized = loop_plan.block_effects.is_some()
+ && loop_plan.phis.is_some()
+ && loop_plan.frag.is_some()
+ && loop_plan.final_values.is_some();
+
+ if use_generalized {
+ if debug {
+ trace_logger.debug("lowerer/loop", "Using generalized fields");
+ }
+ Self::lower_loop_generalized(builder, loop_plan, ctx)
+ } else {
+ if debug {
+ trace_logger.debug("lowerer/loop", "Using legacy fields (fallback)");
+ }
+ Self::lower_loop_legacy(builder, loop_plan, ctx)
+ }
+ }
+
+ /// Phase 273 P2: Generalized loop lowering
+ fn lower_loop_generalized(
+ builder: &mut MirBuilder,
+ loop_plan: CoreLoopPlan,
+ ctx: &LoopPatternContext,
+ ) -> Result