phase29ao(p37): release adopt pattern6 scan_with_init subset

This commit is contained in:
2025-12-30 17:40:00 +09:00
parent 2c77baedd1
commit 7bb5ee56db
10 changed files with 83 additions and 8 deletions

View File

@ -359,6 +359,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_pattern6_scan_with_init(
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

@ -10,7 +10,10 @@ use crate::mir::builder::control_flow::plan::planner::Freeze;
use crate::mir::builder::MirBuilder;
pub(in crate::mir::builder) use shadow_adopt::{
try_release_adopt_core_plan_for_pattern1, try_shadow_adopt_core_plan, ShadowAdoptOutcome,
try_release_adopt_core_plan_for_pattern1,
try_release_adopt_core_plan_for_pattern6_scan_with_init,
try_shadow_adopt_core_plan,
ShadowAdoptOutcome,
};
#[allow(dead_code)]

View File

@ -52,6 +52,32 @@ pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern1(
}
}
pub(in crate::mir::builder) fn try_release_adopt_core_plan_for_pattern6_scan_with_init(
builder: &mut MirBuilder,
ctx: &LoopPatternContext,
domain_plan: &DomainPlan,
outcome: &PlanBuildOutcome,
) -> Result<Option<CorePlan>, String> {
if !matches!(domain_plan, DomainPlan::ScanWithInit(_)) {
return Ok(None);
}
if !matches!(outcome.plan.as_ref(), Some(DomainPlan::ScanWithInit(_))) {
return Ok(None);
}
let Some(facts) = outcome.facts.as_ref() else {
return Ok(None);
};
if facts.facts.scan_with_init.is_none() {
return Ok(None);
}
match compose_coreplan_for_pattern6_scan_with_init(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,