[llvm] 7b2a708 - AsmParser: parse zeroinitializer, poison constants (#117809)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 27 04:00:03 PST 2024
Author: Ramkumar Ramachandra
Date: 2024-11-27T11:59:59Z
New Revision: 7b2a708a27da1cbdf16b912aa2c98e9718256596
URL: https://github.com/llvm/llvm-project/commit/7b2a708a27da1cbdf16b912aa2c98e9718256596
DIFF: https://github.com/llvm/llvm-project/commit/7b2a708a27da1cbdf16b912aa2c98e9718256596.diff
LOG: AsmParser: parse zeroinitializer, poison constants (#117809)
LLParser::parseConstantValue is missing support for parsing
zeroinitializer and poison constants. Fix this.
Added:
Modified:
llvm/lib/AsmParser/LLParser.cpp
llvm/unittests/AsmParser/AsmParserTest.cpp
Removed:
################################################################################
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index b8a8df71d4de21..dd72d46f5d9aad 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -6261,6 +6261,8 @@ bool LLParser::parseConstantValue(Type *Ty, Constant *&C) {
case ValID::t_APSInt:
case ValID::t_APFloat:
case ValID::t_Undef:
+ case ValID::t_Poison:
+ case ValID::t_Zero:
case ValID::t_Constant:
case ValID::t_ConstantSplat:
case ValID::t_ConstantStruct:
diff --git a/llvm/unittests/AsmParser/AsmParserTest.cpp b/llvm/unittests/AsmParser/AsmParserTest.cpp
index a70c061d3e3044..ce226705068afb 100644
--- a/llvm/unittests/AsmParser/AsmParserTest.cpp
+++ b/llvm/unittests/AsmParser/AsmParserTest.cpp
@@ -93,6 +93,22 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) {
EXPECT_TRUE(V->getType()->isVectorTy());
ASSERT_TRUE(isa<ConstantDataVector>(V));
+ V = parseConstantValue("<4 x i32> splat (i32 -2)", Error, M);
+ ASSERT_TRUE(V);
+ EXPECT_TRUE(V->getType()->isVectorTy());
+ ASSERT_TRUE(isa<ConstantDataVector>(V));
+
+ V = parseConstantValue("<4 x i32> zeroinitializer", Error, M);
+ ASSERT_TRUE(V);
+ EXPECT_TRUE(V->getType()->isVectorTy());
+ ASSERT_TRUE(isa<Constant>(V));
+ EXPECT_TRUE(cast<Constant>(V)->isNullValue());
+
+ V = parseConstantValue("<4 x i32> poison", Error, M);
+ ASSERT_TRUE(V);
+ EXPECT_TRUE(V->getType()->isVectorTy());
+ ASSERT_TRUE(isa<PoisonValue>(V));
+
V = parseConstantValue("i32 add (i32 1, i32 2)", Error, M);
ASSERT_TRUE(V);
ASSERT_TRUE(isa<ConstantInt>(V));
@@ -105,6 +121,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) {
ASSERT_TRUE(V);
ASSERT_TRUE(isa<UndefValue>(V));
+ V = parseConstantValue("ptr poison", Error, M);
+ ASSERT_TRUE(V);
+ ASSERT_TRUE(isa<PoisonValue>(V));
+
EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M));
EXPECT_EQ(Error.getMessage(), "expected type");
More information about the llvm-commits
mailing list