Skip to content

Commit 4b42699

Browse files
author
Leon Clark
committed
Address review comments.
1 parent f85c43c commit 4b42699

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
@@ -4004,31 +4004,28 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
40044004
if (!Phi || Phi->getNumIncomingValues() != 2u)
40054005
return false;
40064006

4007-
auto *Shuf0 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(0u));
4008-
auto *Shuf1 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(1u));
4009-
if (!Shuf0 || !Shuf1)
4010-
return false;
4011-
4012-
Value *Op0 = nullptr;
4013-
Value *Op1 = nullptr;
4007+
Value *Op = nullptr;
4008+
ArrayRef<int> Mask0;
4009+
ArrayRef<int> Mask1;
40144010

4015-
if (!match(Shuf0, m_OneUse(m_Shuffle(m_Value(Op0), m_Poison()))) ||
4016-
!match(Shuf1, m_OneUse(m_Shuffle(m_Value(Op1), m_Poison()))) ||
4017-
Op0 != Op1)
4011+
if (!match(Phi->getOperand(0u),
4012+
m_OneUse(m_Shuffle(m_Value(Op), m_Poison(), m_Mask(Mask0)))) ||
4013+
!match(Phi->getOperand(1u),
4014+
m_OneUse(m_Shuffle(m_Specific(Op), m_Poison(), m_Mask(Mask1)))))
40184015
return false;
40194016

4017+
auto *Shuf = cast<ShuffleVectorInst>(Phi->getOperand(0u));
4018+
40204019
// Ensure result vectors are wider than the argument vector.
4021-
auto *InputVT = cast<FixedVectorType>(Op0->getType());
4022-
auto *ResultVT = cast<FixedVectorType>(Shuf0->getType());
4020+
auto *InputVT = cast<FixedVectorType>(Op->getType());
4021+
auto *ResultVT = cast<FixedVectorType>(Shuf->getType());
40234022
auto const InputNumElements = InputVT->getNumElements();
40244023

40254024
if (InputNumElements >= ResultVT->getNumElements())
40264025
return false;
40274026

40284027
// Take the difference of the two shuffle masks at each index. Ignore poison
40294028
// values at the same index in both masks.
4030-
ArrayRef Mask0 = Shuf0->getShuffleMask();
4031-
ArrayRef Mask1 = Shuf1->getShuffleMask();
40324029
SmallVector<int, 16> NewMask;
40334030
NewMask.reserve(Mask0.size());
40344031

@@ -4070,22 +4067,22 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
40704067

40714068
// Create new shuffles and narrowed phi.
40724069
auto Builder = IRBuilder(&I);
4073-
Builder.SetInsertPoint(Shuf0);
4074-
Builder.SetCurrentDebugLocation(Shuf0->getDebugLoc());
4070+
Builder.SetInsertPoint(Shuf);
4071+
Builder.SetCurrentDebugLocation(Shuf->getDebugLoc());
40754072
auto *PoisonVal = PoisonValue::get(InputVT);
4076-
auto *NewShuf0 = Builder.CreateShuffleVector(Op0, PoisonVal, NewMask);
4073+
auto *NewShuf0 = Builder.CreateShuffleVector(Op, PoisonVal, NewMask);
40774074

40784075
Builder.SetInsertPoint(Phi);
40794076
Builder.SetCurrentDebugLocation(Phi->getDebugLoc());
40804077
auto *NewPhi = Builder.CreatePHI(NewShuf0->getType(), 2u);
40814078
NewPhi->addIncoming(NewShuf0, Phi->getIncomingBlock(0u));
4082-
NewPhi->addIncoming(Op1, Phi->getIncomingBlock(1u));
4079+
NewPhi->addIncoming(Op, Phi->getIncomingBlock(1u));
40834080

40844081
Builder.SetInsertPoint(*NewPhi->getInsertionPointAfterDef());
40854082
PoisonVal = PoisonValue::get(NewPhi->getType());
4086-
auto *NewShuf2 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
4083+
auto *NewShuf1 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
40874084

4088-
replaceValue(*Phi, *NewShuf2);
4085+
replaceValue(*Phi, *NewShuf1);
40894086
return true;
40904087
}
40914088

0 commit comments

Comments
 (0)