[llvm] [VPlan] Consolidate logic for narrow to single scalars (PR #151506)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 31 05:43:07 PDT 2025
================
@@ -1238,21 +1214,19 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
if (RepR && (RepR->isSingleScalar() || RepR->isPredicated()))
continue;
- auto *RepOrWidenR = cast<VPSingleDefRecipe>(&R);
- // Skip recipes that aren't single scalars or don't have only their
- // scalar results used. In the latter case, we would introduce extra
- // broadcasts.
- if (!vputils::isSingleScalar(RepOrWidenR) ||
- any_of(RepOrWidenR->users(), [RepOrWidenR](VPUser *U) {
- return !U->usesScalars(RepOrWidenR);
- }))
+ auto *Def = cast<VPSingleDefRecipe>(&R);
+ // Skip recipes that aren't single scalars or that don't have users or
+ // that don't have only their scalar results used (would introduce extra
+ // broadcasts in this case).
+ if (!vputils::isSingleScalar(Def) || Def->getNumUsers() == 0 ||
+ any_of(Def->users(),
+ [Def](VPUser *U) { return !U->usesScalars(Def); }))
continue;
- auto *Clone = new VPReplicateRecipe(RepOrWidenR->getUnderlyingInstr(),
- RepOrWidenR->operands(),
- true /*IsSingleScalar*/);
- Clone->insertBefore(RepOrWidenR);
- RepOrWidenR->replaceAllUsesWith(Clone);
+ auto *Clone = new VPReplicateRecipe(
+ Def->getUnderlyingInstr(), Def->operands(), true /*IsSingleScalar*/);
+ Clone->insertBefore(Def);
+ Def->replaceAllUsesWith(Clone);
----------------
fhahn wrote:
Why change the code here? The original name `RepOrWidenR` seems more accurate?
https://github.com/llvm/llvm-project/pull/151506
More information about the llvm-commits
mailing list