From 6a0f29c1867b8d5d62f0b7383a3a86e8626c5568 Mon Sep 17 00:00:00 2001 From: Ramkumar Ramachandra Date: Tue, 26 Nov 2024 23:17:14 +0000 Subject: [PATCH] AsmParser: parse zeroinitializer, poison constant val LLParser::parseConstantValue is missing support for parsing zeroinitializer and poison constants. Fix this. --- llvm/lib/AsmParser/LLParser.cpp | 2 ++ llvm/unittests/AsmParser/AsmParserTest.cpp | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index b8a8df71d4de2..dd72d46f5d9aa 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 a70c061d3e304..ce226705068af 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(V)); + V = parseConstantValue("<4 x i32> splat (i32 -2)", Error, M); + ASSERT_TRUE(V); + EXPECT_TRUE(V->getType()->isVectorTy()); + ASSERT_TRUE(isa(V)); + + V = parseConstantValue("<4 x i32> zeroinitializer", Error, M); + ASSERT_TRUE(V); + EXPECT_TRUE(V->getType()->isVectorTy()); + ASSERT_TRUE(isa(V)); + EXPECT_TRUE(cast(V)->isNullValue()); + + V = parseConstantValue("<4 x i32> poison", Error, M); + ASSERT_TRUE(V); + EXPECT_TRUE(V->getType()->isVectorTy()); + ASSERT_TRUE(isa(V)); + V = parseConstantValue("i32 add (i32 1, i32 2)", Error, M); ASSERT_TRUE(V); ASSERT_TRUE(isa(V)); @@ -105,6 +121,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) { ASSERT_TRUE(V); ASSERT_TRUE(isa(V)); + V = parseConstantValue("ptr poison", Error, M); + ASSERT_TRUE(V); + ASSERT_TRUE(isa(V)); + EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M)); EXPECT_EQ(Error.getMessage(), "expected type");