Skip to content

Commit fb6b73d

Browse files
author
Leon Clark
committed
Address review comments.
1 parent efb271e commit fb6b73d

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

llvm/lib/Transforms/Vectorize/VectorCombine.cpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3701,31 +3701,28 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
37013701
if (!Phi || Phi->getNumIncomingValues() != 2u)
37023702
return false;
37033703

3704-
auto *Shuf0 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(0u));
3705-
auto *Shuf1 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(1u));
3706-
if (!Shuf0 || !Shuf1)
3707-
return false;
3708-
3709-
Value *Op0 = nullptr;
3710-
Value *Op1 = nullptr;
3704+
Value *Op = nullptr;
3705+
ArrayRef<int> Mask0;
3706+
ArrayRef<int> Mask1;
37113707

3712-
if (!match(Shuf0, m_OneUse(m_Shuffle(m_Value(Op0), m_Poison()))) ||
3713-
!match(Shuf1, m_OneUse(m_Shuffle(m_Value(Op1), m_Poison()))) ||
3714-
Op0 != Op1)
3708+
if (!match(Phi->getOperand(0u),
3709+
m_OneUse(m_Shuffle(m_Value(Op), m_Poison(), m_Mask(Mask0)))) ||
3710+
!match(Phi->getOperand(1u),
3711+
m_OneUse(m_Shuffle(m_Specific(Op), m_Poison(), m_Mask(Mask1)))))
37153712
return false;
37163713

3714+
auto *Shuf = cast<ShuffleVectorInst>(Phi->getOperand(0u));
3715+
37173716
// Ensure result vectors are wider than the argument vector.
3718-
auto *InputVT = cast<FixedVectorType>(Op0->getType());
3719-
auto *ResultVT = cast<FixedVectorType>(Shuf0->getType());
3717+
auto *InputVT = cast<FixedVectorType>(Op->getType());
3718+
auto *ResultVT = cast<FixedVectorType>(Shuf->getType());
37203719
auto const InputNumElements = InputVT->getNumElements();
37213720

37223721
if (InputNumElements >= ResultVT->getNumElements())
37233722
return false;
37243723

37253724
// Take the difference of the two shuffle masks at each index. Ignore poison
37263725
// values at the same index in both masks.
3727-
ArrayRef Mask0 = Shuf0->getShuffleMask();
3728-
ArrayRef Mask1 = Shuf1->getShuffleMask();
37293726
SmallVector<int, 16> NewMask;
37303727
NewMask.reserve(Mask0.size());
37313728

@@ -3767,22 +3764,22 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
37673764

37683765
// Create new shuffles and narrowed phi.
37693766
auto Builder = IRBuilder(&I);
3770-
Builder.SetInsertPoint(Shuf0);
3771-
Builder.SetCurrentDebugLocation(Shuf0->getDebugLoc());
3767+
Builder.SetInsertPoint(Shuf);
3768+
Builder.SetCurrentDebugLocation(Shuf->getDebugLoc());
37723769
auto *PoisonVal = PoisonValue::get(InputVT);
3773-
auto *NewShuf0 = Builder.CreateShuffleVector(Op0, PoisonVal, NewMask);
3770+
auto *NewShuf0 = Builder.CreateShuffleVector(Op, PoisonVal, NewMask);
37743771

37753772
Builder.SetInsertPoint(Phi);
37763773
Builder.SetCurrentDebugLocation(Phi->getDebugLoc());
37773774
auto *NewPhi = Builder.CreatePHI(NewShuf0->getType(), 2u);
37783775
NewPhi->addIncoming(NewShuf0, Phi->getIncomingBlock(0u));
3779-
NewPhi->addIncoming(Op1, Phi->getIncomingBlock(1u));
3776+
NewPhi->addIncoming(Op, Phi->getIncomingBlock(1u));
37803777

37813778
Builder.SetInsertPoint(*NewPhi->getInsertionPointAfterDef());
37823779
PoisonVal = PoisonValue::get(NewPhi->getType());
3783-
auto *NewShuf2 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
3780+
auto *NewShuf1 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
37843781

3785-
replaceValue(*Phi, *NewShuf2);
3782+
replaceValue(*Phi, *NewShuf1);
37863783
return true;
37873784
}
37883785

0 commit comments

Comments
 (0)