[llvm] r223616 - IR: Add missing tests for function-local metadata
Duncan P. N. Exon Smith
dexonsmith at apple.com
Sun Dec 7 09:56:16 PST 2014
Author: dexonsmith
Date: Sun Dec 7 11:56:16 2014
New Revision: 223616
URL: http://llvm.org/viewvc/llvm-project?rev=223616&view=rev
Log:
IR: Add missing tests for function-local metadata
Add assembly and bitcode tests that I neglected to add in r223564 (IR:
Disallow complicated function-local metadata) and r223574 (IR: Disallow
function-local metadata attachments).
Found a couple of bugs:
- The error message for function-local attachments gave the wrong line
number -- it indicated the next token (typically on the next line)
instead of the token that started the attachment. Fixed.
- Metadata arguments of the form `!{i32 0, i32 %v}` (or with the
arguments reversed) fired an assertion in `ValueEnumerator` in LLVM
v3.5, so I suppose this never really worked. I suppose this was
"fixed" by r223564.
(Thanks to dblaikie for pointing out my omission.)
Part of PR21532.
Added:
llvm/trunk/test/Assembler/functionlocal-metadata-attachments.ll
llvm/trunk/test/Assembler/functionlocal-metadata-complex-1.ll
llvm/trunk/test/Assembler/functionlocal-metadata-complex-2.ll
llvm/trunk/test/Assembler/functionlocal-metadata-complex-3.ll
llvm/trunk/test/Bitcode/function-local-metadata.ll
llvm/trunk/test/Bitcode/function-local-metadata.ll.bc
Modified:
llvm/trunk/lib/AsmParser/LLParser.cpp
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=223616&r1=223615&r2=223616&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Sun Dec 7 11:56:16 2014
@@ -1532,7 +1532,7 @@ bool LLParser::ParseInstructionMetadata(
return true;
assert(ID.Kind == ValID::t_MDNode);
if (ID.MDNodeVal->isFunctionLocal())
- return TokError("unexpected function-local metadata");
+ return Error(Loc, "unexpected function-local metadata");
Inst->setMetadata(MDK, ID.MDNodeVal);
} else {
unsigned NodeID = 0;
Added: llvm/trunk/test/Assembler/functionlocal-metadata-attachments.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/functionlocal-metadata-attachments.ll?rev=223616&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/functionlocal-metadata-attachments.ll (added)
+++ llvm/trunk/test/Assembler/functionlocal-metadata-attachments.ll Sun Dec 7 11:56:16 2014
@@ -0,0 +1,7 @@
+; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
+
+define void @foo(i32 %v) {
+entry:
+; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected function-local metadata
+ ret void, !foo !{i32 %v}
+}
Added: llvm/trunk/test/Assembler/functionlocal-metadata-complex-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/functionlocal-metadata-complex-1.ll?rev=223616&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/functionlocal-metadata-complex-1.ll (added)
+++ llvm/trunk/test/Assembler/functionlocal-metadata-complex-1.ll Sun Dec 7 11:56:16 2014
@@ -0,0 +1,10 @@
+; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
+
+define void @foo(i32 %v) {
+entry:
+; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected operand after function-local metadata
+ call void @llvm.bar(metadata !{i32 %v, i32 0})
+ ret void
+}
+
+declare void @llvm.bar(metadata)
Added: llvm/trunk/test/Assembler/functionlocal-metadata-complex-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/functionlocal-metadata-complex-2.ll?rev=223616&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/functionlocal-metadata-complex-2.ll (added)
+++ llvm/trunk/test/Assembler/functionlocal-metadata-complex-2.ll Sun Dec 7 11:56:16 2014
@@ -0,0 +1,10 @@
+; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
+
+define void @foo(i32 %v) {
+entry:
+; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected function-local metadata
+ call void @llvm.bar(metadata !{i32 0, i32 %v})
+ ret void
+}
+
+declare void @llvm.bar(metadata)
Added: llvm/trunk/test/Assembler/functionlocal-metadata-complex-3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/functionlocal-metadata-complex-3.ll?rev=223616&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/functionlocal-metadata-complex-3.ll (added)
+++ llvm/trunk/test/Assembler/functionlocal-metadata-complex-3.ll Sun Dec 7 11:56:16 2014
@@ -0,0 +1,10 @@
+; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
+
+define void @foo(i32 %v) {
+entry:
+; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected nested function-local metadata
+ call void @llvm.bar(metadata !{metadata !{i32 %v}})
+ ret void
+}
+
+declare void @llvm.bar(metadata)
Added: llvm/trunk/test/Bitcode/function-local-metadata.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/function-local-metadata.ll?rev=223616&view=auto
==============================================================================
--- llvm/trunk/test/Bitcode/function-local-metadata.ll (added)
+++ llvm/trunk/test/Bitcode/function-local-metadata.ll Sun Dec 7 11:56:16 2014
@@ -0,0 +1,35 @@
+; RUN: llvm-dis < %s.bc | FileCheck %s
+
+; Check that function-local metadata is dropped correctly when it's not a
+; direct argument to a call instruction.
+;
+; Bitcode assembled by llvm-as v3.5.0.
+
+define void @foo(i32 %v) {
+; CHECK: entry:
+entry:
+; CHECK-NEXT: call void @llvm.bar(metadata !{i32 %v})
+ call void @llvm.bar(metadata !{i32 %v})
+
+; Note: these supposedly legal instructions fired an assertion in llvm-as:
+;
+; Assertion failed: (I != ValueMap.end() && "Value not in slotcalculator!"), function getValueID, file lib/Bitcode/Writer/ValueEnumerator.cpp, line 138.
+;
+; So, I didn't test them; it looks like bitcode compatability is irrelevant.
+ ; call void @llvm.bar(metadata !{i32 0, i32 %v})
+ ; call void @llvm.bar(metadata !{i32 %v, i32 0})
+ ; call void @llvm.bar(metadata !{metadata !{}, i32 %v})
+ ; call void @llvm.bar(metadata !{i32 %v, metadata !{}})
+
+; CHECK-NEXT: call void @llvm.bar(metadata !0)
+; CHECK-NEXT: call void @llvm.bar(metadata !0)
+ call void @llvm.bar(metadata !{i32 %v, i32 %v})
+ call void @llvm.bar(metadata !{metadata !{i32 %v}})
+
+; CHECK-NEXT: ret void{{$}}
+ ret void, !baz !{i32 %v}
+}
+
+declare void @llvm.bar(metadata)
+
+; CHECK: !0 = metadata !{}
Added: llvm/trunk/test/Bitcode/function-local-metadata.ll.bc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/function-local-metadata.ll.bc?rev=223616&view=auto
==============================================================================
Binary files llvm/trunk/test/Bitcode/function-local-metadata.ll.bc (added) and llvm/trunk/test/Bitcode/function-local-metadata.ll.bc Sun Dec 7 11:56:16 2014 differ
More information about the llvm-commits
mailing list