From: Sanjay Patel Date: Tue, 1 Nov 2022 16:04:04 +0000 (-0400) Subject: [PatternMatch] add unittests for logical-and/or; NFC X-Git-Tag: upstream/17.0.6~28843 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4c61314420ca8794ad6d2588566c64109482505;p=platform%2Fupstream%2Fllvm.git [PatternMatch] add unittests for logical-and/or; NFC --- diff --git a/llvm/unittests/IR/PatternMatch.cpp b/llvm/unittests/IR/PatternMatch.cpp index 05456ee..d2ec259 100644 --- a/llvm/unittests/IR/PatternMatch.cpp +++ b/llvm/unittests/IR/PatternMatch.cpp @@ -1707,6 +1707,35 @@ TEST_F(PatternMatchTest, LogicalSelects) { EXPECT_FALSE(match(Or, m_c_LogicalOr(m_Specific(Y), m_Specific(Y)))); } +TEST_F(PatternMatchTest, VectorLogicalSelects) { + Type *i1 = IRB.getInt1Ty(); + Type *v3i1 = FixedVectorType::get(i1, 3); + + Value *Alloca = IRB.CreateAlloca(i1); + Value *AllocaVec = IRB.CreateAlloca(v3i1); + Value *Scalar = IRB.CreateLoad(i1, Alloca); + Value *Vector = IRB.CreateLoad(v3i1, AllocaVec); + Constant *F = Constant::getNullValue(v3i1); + Constant *T = Constant::getAllOnesValue(v3i1); + + // select <3 x i1> Vector, <3 x i1> Vector, <3 x i1> + Value *VecAnd = IRB.CreateSelect(Vector, Vector, F); + + // select i1 Scalar, <3 x i1> Vector, <3 x i1> + Value *MixedTypeAnd = IRB.CreateSelect(Scalar, Vector, F); + + // select <3 x i1> Vector, <3 x i1> , <3 x i1> Vector + Value *VecOr = IRB.CreateSelect(Vector, T, Vector); + + // select i1 Scalar, <3 x i1> , <3 x i1> Vector + Value *MixedTypeOr = IRB.CreateSelect(Scalar, T, Vector); + + EXPECT_TRUE(match(VecAnd, m_LogicalAnd(m_Value(), m_Value()))); + EXPECT_TRUE(match(MixedTypeAnd, m_LogicalAnd(m_Value(), m_Value()))); + EXPECT_TRUE(match(VecOr, m_LogicalOr(m_Value(), m_Value()))); + EXPECT_TRUE(match(MixedTypeOr, m_LogicalOr(m_Value(), m_Value()))); +} + TEST_F(PatternMatchTest, VScale) { DataLayout DL = M->getDataLayout();