Skip to content

Commit 78d6a2e

Browse files
author
Leon Clark
committed
Address review comments.
1 parent c712df5 commit 78d6a2e

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

3496-
auto *Shuf0 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(0u));
3497-
auto *Shuf1 = dyn_cast<ShuffleVectorInst>(Phi->getOperand(1u));
3498-
if (!Shuf0 || !Shuf1)
3499-
return false;
3500-
3501-
Value *Op0 = nullptr;
3502-
Value *Op1 = nullptr;
3496+
Value *Op = nullptr;
3497+
ArrayRef<int> Mask0;
3498+
ArrayRef<int> Mask1;
35033499

3504-
if (!match(Shuf0, m_OneUse(m_Shuffle(m_Value(Op0), m_Poison()))) ||
3505-
!match(Shuf1, m_OneUse(m_Shuffle(m_Value(Op1), m_Poison()))) ||
3506-
Op0 != Op1)
3500+
if (!match(Phi->getOperand(0u),
3501+
m_OneUse(m_Shuffle(m_Value(Op), m_Poison(), m_Mask(Mask0)))) ||
3502+
!match(Phi->getOperand(1u),
3503+
m_OneUse(m_Shuffle(m_Specific(Op), m_Poison(), m_Mask(Mask1)))))
35073504
return false;
35083505

3506+
auto *Shuf = cast<ShuffleVectorInst>(Phi->getOperand(0u));
3507+
35093508
// Ensure result vectors are wider than the argument vector.
3510-
auto *InputVT = cast<FixedVectorType>(Op0->getType());
3511-
auto *ResultVT = cast<FixedVectorType>(Shuf0->getType());
3509+
auto *InputVT = cast<FixedVectorType>(Op->getType());
3510+
auto *ResultVT = cast<FixedVectorType>(Shuf->getType());
35123511
auto const InputNumElements = InputVT->getNumElements();
35133512

35143513
if (InputNumElements >= ResultVT->getNumElements())
35153514
return false;
35163515

35173516
// Take the difference of the two shuffle masks at each index. Ignore poison
35183517
// values at the same index in both masks.
3519-
ArrayRef Mask0 = Shuf0->getShuffleMask();
3520-
ArrayRef Mask1 = Shuf1->getShuffleMask();
35213518
SmallVector<int, 16> NewMask;
35223519
NewMask.reserve(Mask0.size());
35233520

@@ -3559,22 +3556,22 @@ bool VectorCombine::shrinkPhiOfShuffles(Instruction &I) {
35593556

35603557
// Create new shuffles and narrowed phi.
35613558
auto Builder = IRBuilder(&I);
3562-
Builder.SetInsertPoint(Shuf0);
3563-
Builder.SetCurrentDebugLocation(Shuf0->getDebugLoc());
3559+
Builder.SetInsertPoint(Shuf);
3560+
Builder.SetCurrentDebugLocation(Shuf->getDebugLoc());
35643561
auto *PoisonVal = PoisonValue::get(InputVT);
3565-
auto *NewShuf0 = Builder.CreateShuffleVector(Op0, PoisonVal, NewMask);
3562+
auto *NewShuf0 = Builder.CreateShuffleVector(Op, PoisonVal, NewMask);
35663563

35673564
Builder.SetInsertPoint(Phi);
35683565
Builder.SetCurrentDebugLocation(Phi->getDebugLoc());
35693566
auto *NewPhi = Builder.CreatePHI(NewShuf0->getType(), 2u);
35703567
NewPhi->addIncoming(NewShuf0, Phi->getIncomingBlock(0u));
3571-
NewPhi->addIncoming(Op1, Phi->getIncomingBlock(1u));
3568+
NewPhi->addIncoming(Op, Phi->getIncomingBlock(1u));
35723569

35733570
Builder.SetInsertPoint(*NewPhi->getInsertionPointAfterDef());
35743571
PoisonVal = PoisonValue::get(NewPhi->getType());
3575-
auto *NewShuf2 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
3572+
auto *NewShuf1 = Builder.CreateShuffleVector(NewPhi, PoisonVal, Mask1);
35763573

3577-
replaceValue(*Phi, *NewShuf2);
3574+
replaceValue(*Phi, *NewShuf1);
35783575
return true;
35793576
}
35803577

0 commit comments

Comments
 (0)