Skip to content

Commit 8b1cc2d

Browse files
committed
[VPlan] Update canNarrowLoad to check WidenMember0's op first (NFCI).
This hardens the code to check based on WideMember0's operands. This ensures each call will go through the same check. Should be NFC currently but needed when generalizing in follow-up patches.
1 parent 046ae85 commit 8b1cc2d

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4147,13 +4147,13 @@ VPlanTransforms::expandSCEVs(VPlan &Plan, ScalarEvolution &SE) {
41474147
/// is defined at \p Idx of a load interleave group.
41484148
static bool canNarrowLoad(VPWidenRecipe *WideMember0, unsigned OpIdx,
41494149
VPValue *OpV, unsigned Idx) {
4150-
auto *DefR = OpV->getDefiningRecipe();
4151-
if (!DefR)
4152-
return WideMember0->getOperand(OpIdx) == OpV;
4153-
if (auto *W = dyn_cast<VPWidenLoadRecipe>(DefR))
4154-
return !W->getMask() && WideMember0->getOperand(OpIdx) == OpV;
4155-
4156-
if (auto *IR = dyn_cast<VPInterleaveRecipe>(DefR))
4150+
VPValue *Member0Op = WideMember0->getOperand(OpIdx);
4151+
VPRecipeBase *Member0OpR = Member0Op->getDefiningRecipe();
4152+
if (!Member0OpR)
4153+
return Member0Op == OpV;
4154+
if (auto *W = dyn_cast<VPWidenLoadRecipe>(Member0OpR))
4155+
return !W->getMask() && Member0Op == OpV;
4156+
if (auto *IR = dyn_cast<VPInterleaveRecipe>(Member0OpR))
41574157
return IR->getInterleaveGroup()->isFull() && IR->getVPValue(Idx) == OpV;
41584158
return false;
41594159
}

0 commit comments

Comments
 (0)