summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2015-09-09 13:44:33 +0000
committerAlex Lorenz <arphaman@gmail.com>2015-09-09 13:44:33 +0000
commitb9a68dbcaee014580b2f78d9a630635d7d5f5377 (patch)
tree4dbc61265b320df05d0e6d0cdae7008df0a6e9e5 /llvm
parentd511726ce9c03b59627df9fa97cc267762bf8fcd (diff)
downloadbcm5719-llvm-b9a68dbcaee014580b2f78d9a630635d7d5f5377.tar.gz
bcm5719-llvm-b9a68dbcaee014580b2f78d9a630635d7d5f5377.zip
Fix PR 24633 - Handle undef values when parsing standalone constants.
llvm-svn: 247145
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp1
-rw-r--r--llvm/test/CodeGen/MIR/X86/memory-operands.mir16
-rw-r--r--llvm/unittests/AsmParser/AsmParserTest.cpp4
3 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 8ec5c6a4aa6..1f786e4093f 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -4228,6 +4228,7 @@ bool LLParser::parseConstantValue(Type *Ty, Constant *&C) {
switch (ID.Kind) {
case ValID::t_APSInt:
case ValID::t_APFloat:
+ case ValID::t_Undef:
case ValID::t_Constant:
case ValID::t_ConstantStruct:
case ValID::t_PackedConstantStruct: {
diff --git a/llvm/test/CodeGen/MIR/X86/memory-operands.mir b/llvm/test/CodeGen/MIR/X86/memory-operands.mir
index 0f9b38feda2..3c9463d2f31 100644
--- a/llvm/test/CodeGen/MIR/X86/memory-operands.mir
+++ b/llvm/test/CodeGen/MIR/X86/memory-operands.mir
@@ -180,6 +180,12 @@
store i32 %conv, i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0), align 16
ret void
}
+
+ define i8* @undef_value() {
+ entry:
+ %0 = load i8*, i8** undef, align 8
+ ret i8* %0
+ }
...
---
name: test
@@ -490,3 +496,13 @@ body: |
MOV32mr killed %rax, 1, _, 0, _, %edi, implicit killed %rdi :: (store 4 into `i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0)`, align 16)
RETQ
...
+---
+name: undef_value
+tracksRegLiveness: true
+body: |
+ bb.0.entry:
+ ; CHECK-LABEL: name: undef_value
+ ; CHECK: %rax = MOV64rm undef %rax, 1, _, 0, _ :: (load 8 from `i8** undef`)
+ %rax = MOV64rm undef %rax, 1, _, 0, _ :: (load 8 from `i8** undef`)
+ RETQ %rax
+...
diff --git a/llvm/unittests/AsmParser/AsmParserTest.cpp b/llvm/unittests/AsmParser/AsmParserTest.cpp
index ef16eb1cfb3..4189310fda2 100644
--- a/llvm/unittests/AsmParser/AsmParserTest.cpp
+++ b/llvm/unittests/AsmParser/AsmParserTest.cpp
@@ -99,6 +99,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) {
ASSERT_TRUE(V);
ASSERT_TRUE(isa<BlockAddress>(V));
+ V = parseConstantValue("i8** undef", Error, M);
+ ASSERT_TRUE(V);
+ ASSERT_TRUE(isa<UndefValue>(V));
+
EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M));
EXPECT_EQ(Error.getMessage(), "expected type");
OpenPOWER on IntegriCloud