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");