aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/IR/ConstantsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/IR/ConstantsTest.cpp')
-rw-r--r--llvm/unittests/IR/ConstantsTest.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/unittests/IR/ConstantsTest.cpp b/llvm/unittests/IR/ConstantsTest.cpp
index 9dd1ba8..afae154 100644
--- a/llvm/unittests/IR/ConstantsTest.cpp
+++ b/llvm/unittests/IR/ConstantsTest.cpp
@@ -585,6 +585,43 @@ TEST(ConstantsTest, FoldGlobalVariablePtr) {
Instruction::And, TheConstantExpr, TheConstant)->isNullValue());
}
+// Check that containsUndefOrPoisonElement and containsPoisonElement is working
+// great
+
+TEST(ConstantsTest, containsUndefElemTest) {
+ LLVMContext Context;
+
+ Type *Int32Ty = Type::getInt32Ty(Context);
+ Constant *CU = UndefValue::get(Int32Ty);
+ Constant *CP = PoisonValue::get(Int32Ty);
+ Constant *C1 = ConstantInt::get(Int32Ty, 1);
+ Constant *C2 = ConstantInt::get(Int32Ty, 2);
+
+ {
+ Constant *V1 = ConstantVector::get({C1, C2});
+ EXPECT_FALSE(V1->containsUndefOrPoisonElement());
+ EXPECT_FALSE(V1->containsPoisonElement());
+ }
+
+ {
+ Constant *V2 = ConstantVector::get({C1, CU});
+ EXPECT_TRUE(V2->containsUndefOrPoisonElement());
+ EXPECT_FALSE(V2->containsPoisonElement());
+ }
+
+ {
+ Constant *V3 = ConstantVector::get({C1, CP});
+ EXPECT_TRUE(V3->containsUndefOrPoisonElement());
+ EXPECT_TRUE(V3->containsPoisonElement());
+ }
+
+ {
+ Constant *V4 = ConstantVector::get({CU, CP});
+ EXPECT_TRUE(V4->containsUndefOrPoisonElement());
+ EXPECT_TRUE(V4->containsPoisonElement());
+ }
+}
+
// Check that undefined elements in vector constants are matched
// correctly for both integer and floating-point types. Just don't
// crash on vectors of pointers (could be handled?).