[llvm] AsmParser: parse zeroinitializer, poison constant val (PR #117809)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 26 15:21:58 PST 2024
https://github.com/artagnon created https://github.com/llvm/llvm-project/pull/117809
LLParser::parseConstantValue is missing support for parsing zeroinitializer and poison constants. Fix this.
>From 6a0f29c1867b8d5d62f0b7383a3a86e8626c5568 Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <ramkumar.ramachandra at codasip.com>
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 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