phase29ao(p39): release adopt pattern2 break subset

This commit is contained in:
2025-12-30 18:04:39 +09:00
parent 46834f3aec
commit b105f82547
10 changed files with 80 additions and 5 deletions

View File

@ -381,6 +381,17 @@ pub(crate) fn route_loop_pattern(
PlanVerifier::verify(&core_plan)?;
return PlanLowerer::lower(builder, core_plan, ctx);
}
if let Some(core_plan) =
composer::try_release_adopt_core_plan_for_pattern2_break_subset(
builder,
ctx,
&domain_plan,
&outcome,
)?
{
PlanVerifier::verify(&core_plan)?;
return PlanLowerer::lower(builder, core_plan, ctx);
}
}
return lower_via_plan(builder, domain_plan, ctx);

View File

@ -11,6 +11,7 @@ use crate::mir::builder::MirBuilder;
pub(in crate::mir::builder) use shadow_adopt::{
try_release_adopt_core_plan_for_pattern1,
try_release_adopt_core_plan_for_pattern2_break_subset,
try_release_adopt_core_plan_for_pattern6_scan_with_init,
try_release_adopt_core_plan_for_pattern7_split_scan,
try_shadow_adopt_core_plan,

View File

@ -104,6 +104,32 @@ pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern7_split_sc
}
}
pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern2_break_subset(
builder: &mut MirBuilder,
ctx: &LoopPatternContext,
domain_plan: &DomainPlan,
outcome: &PlanBuildOutcome,
) -> Result<Option<CorePlan>, String> {
if !matches!(domain_plan, DomainPlan::Pattern2Break(_)) {
return Ok(None);
}
if !matches!(outcome.plan.as_ref(), Some(DomainPlan::Pattern2Break(_))) {
return Ok(None);
}
let Some(facts) = outcome.facts.as_ref() else {
return Ok(None);
};
if facts.facts.pattern2_break.is_none() {
return Ok(None);
}
match compose_coreplan_for_pattern2_break_subset(builder, facts, ctx) {
Ok(Some(core)) => Ok(Some(core)),
Ok(None) | Err(_) => Ok(None),
}
}
pub(in crate::mir::builder) fn compose_coreplan_for_pattern2_break_subset(
builder: &mut MirBuilder,
facts: &CanonicalLoopFacts,