phase29ao(p40): release adopt pattern3 if-phi subset

This commit is contained in:
2025-12-30 18:16:52 +09:00
parent 6000c5c3f9
commit eef061ad2b
10 changed files with 110 additions and 5 deletions

View File

@ -392,6 +392,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_pattern3_ifphi(
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

@ -12,6 +12,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_pattern3_ifphi,
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

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