From c11fd0df64290ed12dbee0617588b1d17a9d5d10 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Mon, 22 Feb 2021 10:24:57 +0000 Subject: [PATCH] [VPlan] Skip VPWidenPHIRecipe in VPInterleavedACcessInfo. Update unit tests that did not expect VPWidenPHIRecipes after 15a74b64dfa9. --- llvm/lib/Transforms/Vectorize/VPlan.cpp | 2 ++ llvm/lib/Transforms/Vectorize/VPlanSLP.cpp | 4 +++- llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Transforms/Vectorize/VPlan.cpp b/llvm/lib/Transforms/Vectorize/VPlan.cpp index 973f165..d7fcba4 100644 --- a/llvm/lib/Transforms/Vectorize/VPlan.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlan.cpp @@ -1039,6 +1039,8 @@ void VPInterleavedAccessInfo::visitBlock(VPBlockBase *Block, Old2NewTy &Old2New, InterleavedAccessInfo &IAI) { if (VPBasicBlock *VPBB = dyn_cast(Block)) { for (VPRecipeBase &VPI : *VPBB) { + if (isa(&VPI)) + continue; assert(isa(&VPI) && "Can only handle VPInstructions"); auto *VPInst = cast(&VPI); auto *Inst = cast(VPInst->getUnderlyingValue()); diff --git a/llvm/lib/Transforms/Vectorize/VPlanSLP.cpp b/llvm/lib/Transforms/Vectorize/VPlanSLP.cpp index 6f21bf4..39c879d 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanSLP.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanSLP.cpp @@ -122,7 +122,9 @@ bool VPlanSlp::areVectorizable(ArrayRef Operands) const { unsigned LoadsSeen = 0; VPBasicBlock *Parent = cast(Operands[0])->getParent(); for (auto &I : *Parent) { - auto *VPI = cast(&I); + auto *VPI = dyn_cast(&I); + if (!VPI) + break; if (VPI->getOpcode() == Instruction::Load && llvm::is_contained(Operands, VPI)) LoadsSeen++; diff --git a/llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp b/llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp index dfa3d0e..b19fdbd 100644 --- a/llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp +++ b/llvm/unittests/Transforms/Vectorize/VPlanHCFGTest.cpp @@ -54,8 +54,8 @@ TEST_F(VPlanHCFGTest, testBuildHCFGInnerLoop) { EXPECT_EQ(&*Plan, VecBB->getPlan()); auto Iter = VecBB->begin(); - VPInstruction *Phi = dyn_cast(&*Iter++); - EXPECT_EQ(Instruction::PHI, Phi->getOpcode()); + VPWidenPHIRecipe *Phi = dyn_cast(&*Iter++); + EXPECT_NE(nullptr, Phi); VPInstruction *Idx = dyn_cast(&*Iter++); EXPECT_EQ(Instruction::GetElementPtr, Idx->getOpcode()); @@ -108,7 +108,7 @@ compound=true N1 -> N2 [ label=""] N2 [label = "for.body:\n" + - "EMIT ir<%indvars.iv> = phi ir<0> ir<%indvars.iv.next>\l" + + "WIDEN-PHI %indvars.iv = phi 0, %indvars.iv.next\l" + "EMIT ir<%arr.idx> = getelementptr ir<%A> ir<%indvars.iv>\l" + "EMIT ir<%l1> = load ir<%arr.idx>\l" + "EMIT ir<%res> = add ir<%l1> ir<10>\l" + -- 2.7.4