24 changes: 12 additions & 12 deletions llvm/lib/Transforms/Vectorize/VectorCombine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ static bool foldExtractExtract(Instruction &I, const TargetTransformInfo &TTI) {

Value *V0, *V1;
uint64_t C0, C1;
if (!match(Ext0, m_ExtractElement(m_Value(V0), m_ConstantInt(C0))) ||
!match(Ext1, m_ExtractElement(m_Value(V1), m_ConstantInt(C1))) ||
if (!match(Ext0, m_ExtractElt(m_Value(V0), m_ConstantInt(C0))) ||
!match(Ext1, m_ExtractElt(m_Value(V1), m_ConstantInt(C1))) ||
V0->getType() != V1->getType())
return false;

Expand All @@ -223,8 +223,8 @@ static bool foldExtractExtract(Instruction &I, const TargetTransformInfo &TTI) {
// probably becomes unnecessary.
uint64_t InsertIndex = std::numeric_limits<uint64_t>::max();
if (I.hasOneUse())
match(I.user_back(), m_InsertElement(m_Value(), m_Value(),
m_ConstantInt(InsertIndex)));
match(I.user_back(),
m_InsertElt(m_Value(), m_Value(), m_ConstantInt(InsertIndex)));

Instruction *ConvertToShuffle;
if (isExtractExtractCheap(Ext0, Ext1, I.getOpcode(), TTI, ConvertToShuffle,
Expand Down Expand Up @@ -266,8 +266,8 @@ static bool foldExtractExtract(Instruction &I, const TargetTransformInfo &TTI) {
static bool foldBitcastShuf(Instruction &I, const TargetTransformInfo &TTI) {
Value *V;
ArrayRef<int> Mask;
if (!match(&I, m_BitCast(m_OneUse(m_ShuffleVector(m_Value(V), m_Undef(),
m_Mask(Mask))))))
if (!match(&I, m_BitCast(
m_OneUse(m_Shuffle(m_Value(V), m_Undef(), m_Mask(Mask))))))
return false;

// Disallow non-vector casts and length-changing shuffles.
Expand Down Expand Up @@ -303,8 +303,8 @@ static bool foldBitcastShuf(Instruction &I, const TargetTransformInfo &TTI) {
// bitcast (shuf V, MaskC) --> shuf (bitcast V), MaskC'
IRBuilder<> Builder(&I);
Value *CastV = Builder.CreateBitCast(V, DestTy);
Value *Shuf = Builder.CreateShuffleVector(CastV, UndefValue::get(DestTy),
NewMask);
Value *Shuf =
Builder.CreateShuffleVector(CastV, UndefValue::get(DestTy), NewMask);
I.replaceAllUsesWith(Shuf);
return true;
}
Expand All @@ -320,10 +320,10 @@ static bool scalarizeBinop(Instruction &I, const TargetTransformInfo &TTI) {
Constant *VecC0, *VecC1;
Value *V0, *V1;
uint64_t Index;
if (!match(Ins0, m_InsertElement(m_Constant(VecC0), m_Value(V0),
m_ConstantInt(Index))) ||
!match(Ins1, m_InsertElement(m_Constant(VecC1), m_Value(V1),
m_SpecificInt(Index))))
if (!match(Ins0, m_InsertElt(m_Constant(VecC0), m_Value(V0),
m_ConstantInt(Index))) ||
!match(Ins1, m_InsertElt(m_Constant(VecC1), m_Value(V1),
m_SpecificInt(Index))))
return false;

Type *ScalarTy = V0->getType();
Expand Down
51 changes: 25 additions & 26 deletions llvm/unittests/IR/PatternMatch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -962,61 +962,60 @@ TEST_F(PatternMatchTest, VectorOps) {
Value *A = nullptr, *B = nullptr, *C = nullptr;

// Test matching insertelement
EXPECT_TRUE(match(VI1, m_InsertElement(m_Value(), m_Value(), m_Value())));
EXPECT_TRUE(match(VI1, m_InsertElt(m_Value(), m_Value(), m_Value())));
EXPECT_TRUE(
match(VI1, m_InsertElement(m_Undef(), m_ConstantInt(), m_ConstantInt())));
match(VI1, m_InsertElt(m_Undef(), m_ConstantInt(), m_ConstantInt())));
EXPECT_TRUE(
match(VI1, m_InsertElement(m_Undef(), m_ConstantInt(), m_Zero())));
match(VI1, m_InsertElt(m_Undef(), m_ConstantInt(), m_Zero())));
EXPECT_TRUE(
match(VI1, m_InsertElement(m_Undef(), m_SpecificInt(1), m_Zero())));
EXPECT_TRUE(match(VI2, m_InsertElement(m_Value(), m_Value(), m_Value())));
match(VI1, m_InsertElt(m_Undef(), m_SpecificInt(1), m_Zero())));
EXPECT_TRUE(match(VI2, m_InsertElt(m_Value(), m_Value(), m_Value())));
EXPECT_FALSE(
match(VI2, m_InsertElement(m_Value(), m_Value(), m_ConstantInt())));
match(VI2, m_InsertElt(m_Value(), m_Value(), m_ConstantInt())));
EXPECT_FALSE(
match(VI2, m_InsertElement(m_Value(), m_ConstantInt(), m_Value())));
EXPECT_FALSE(match(VI2, m_InsertElement(m_Constant(), m_Value(), m_Value())));
EXPECT_TRUE(match(VI3, m_InsertElement(m_Value(A), m_Value(B), m_Value(C))));
match(VI2, m_InsertElt(m_Value(), m_ConstantInt(), m_Value())));
EXPECT_FALSE(match(VI2, m_InsertElt(m_Constant(), m_Value(), m_Value())));
EXPECT_TRUE(match(VI3, m_InsertElt(m_Value(A), m_Value(B), m_Value(C))));
EXPECT_TRUE(A == VI1);
EXPECT_TRUE(B == Val2);
EXPECT_TRUE(isa<ConstantInt>(C));
A = B = C = nullptr; // reset

// Test matching extractelement
EXPECT_TRUE(match(EX1, m_ExtractElement(m_Value(A), m_Value(B))));
EXPECT_TRUE(match(EX1, m_ExtractElt(m_Value(A), m_Value(B))));
EXPECT_TRUE(A == VI4);
EXPECT_TRUE(B == Val);
A = B = C = nullptr; // reset
EXPECT_FALSE(match(EX1, m_ExtractElement(m_Value(), m_ConstantInt())));
EXPECT_TRUE(match(EX2, m_ExtractElement(m_Value(), m_ConstantInt())));
EXPECT_TRUE(match(EX3, m_ExtractElement(m_Constant(), m_ConstantInt())));
EXPECT_FALSE(match(EX1, m_ExtractElt(m_Value(), m_ConstantInt())));
EXPECT_TRUE(match(EX2, m_ExtractElt(m_Value(), m_ConstantInt())));
EXPECT_TRUE(match(EX3, m_ExtractElt(m_Constant(), m_ConstantInt())));

// Test matching shufflevector
ArrayRef<int> Mask;
EXPECT_TRUE(match(SI1, m_ShuffleVector(m_Value(), m_Undef(), m_ZeroMask())));
EXPECT_TRUE(
match(SI2, m_ShuffleVector(m_Value(A), m_Value(B), m_Mask(Mask))));
EXPECT_TRUE(match(SI1, m_Shuffle(m_Value(), m_Undef(), m_ZeroMask())));
EXPECT_TRUE(match(SI2, m_Shuffle(m_Value(A), m_Value(B), m_Mask(Mask))));
EXPECT_TRUE(A == VI3);
EXPECT_TRUE(B == VI4);
A = B = C = nullptr; // reset

// Test matching the vector splat pattern
EXPECT_TRUE(match(
SI1,
m_ShuffleVector(m_InsertElement(m_Undef(), m_SpecificInt(1), m_Zero()),
m_Undef(), m_ZeroMask())));
m_Shuffle(m_InsertElt(m_Undef(), m_SpecificInt(1), m_Zero()),
m_Undef(), m_ZeroMask())));
EXPECT_FALSE(match(
SI3, m_ShuffleVector(m_InsertElement(m_Undef(), m_Value(), m_Zero()),
m_Undef(), m_ZeroMask())));
SI3, m_Shuffle(m_InsertElt(m_Undef(), m_Value(), m_Zero()),
m_Undef(), m_ZeroMask())));
EXPECT_FALSE(match(
SI4, m_ShuffleVector(m_InsertElement(m_Undef(), m_Value(), m_Zero()),
m_Undef(), m_ZeroMask())));
SI4, m_Shuffle(m_InsertElt(m_Undef(), m_Value(), m_Zero()),
m_Undef(), m_ZeroMask())));
EXPECT_TRUE(match(
SP1,
m_ShuffleVector(m_InsertElement(m_Undef(), m_SpecificInt(2), m_Zero()),
m_Undef(), m_ZeroMask())));
m_Shuffle(m_InsertElt(m_Undef(), m_SpecificInt(2), m_Zero()),
m_Undef(), m_ZeroMask())));
EXPECT_TRUE(match(
SP2, m_ShuffleVector(m_InsertElement(m_Undef(), m_Value(A), m_Zero()),
m_Undef(), m_ZeroMask())));
SP2, m_Shuffle(m_InsertElt(m_Undef(), m_Value(A), m_Zero()),
m_Undef(), m_ZeroMask())));
EXPECT_TRUE(A == Val);
}

Expand Down