phase29ao(p40): release adopt pattern3 if-phi subset
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user