Alexey Samsonov | a1944e6 | 2013-10-07 19:03:24 +0000 | [diff] [blame] | 1 | ; RUN: opt -S -globalopt < %s | FileCheck %s |
| 2 | |
| 3 | ; PR6112 - When globalopt does RAUW(@G, %G), the metadata reference should drop |
| 4 | ; to null. Function local metadata that references @G from a different function |
| 5 | ; to that containing %G should likewise drop to null. |
| 6 | @G = internal global i8** null |
| 7 | |
James Molloy | 9c7d4d8 | 2015-11-15 14:21:37 +0000 | [diff] [blame] | 8 | define i32 @main(i32 %argc, i8** %argv) norecurse { |
Alexey Samsonov | a1944e6 | 2013-10-07 19:03:24 +0000 | [diff] [blame] | 9 | ; CHECK-LABEL: @main( |
| 10 | ; CHECK: %G = alloca |
| 11 | store i8** %argv, i8*** @G |
| 12 | ret i32 0 |
| 13 | } |
| 14 | |
| 15 | define void @foo(i32 %x) { |
Duncan P. N. Exon Smith | 5bf8fef | 2014-12-09 18:38:53 +0000 | [diff] [blame] | 16 | ; Note: these arguments look like MDNodes, but they're really syntactic sugar |
| 17 | ; for 'MetadataAsValue::get(ValueAsMetadata::get(Value*))'. When @G drops to |
| 18 | ; null, the ValueAsMetadata instance gets replaced by metadata !{}, or |
| 19 | ; MDNode::get({}). |
Duncan P. N. Exon Smith | be7ea19 | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 20 | call void @llvm.foo(metadata i8*** @G, metadata i32 %x) |
| 21 | ; CHECK: call void @llvm.foo(metadata ![[EMPTY:[0-9]+]], metadata i32 %x) |
Alexey Samsonov | a1944e6 | 2013-10-07 19:03:24 +0000 | [diff] [blame] | 22 | ret void |
| 23 | } |
| 24 | |
Duncan P. N. Exon Smith | 5bf8fef | 2014-12-09 18:38:53 +0000 | [diff] [blame] | 25 | declare void @llvm.foo(metadata, metadata) nounwind readnone |
Alexey Samsonov | a1944e6 | 2013-10-07 19:03:24 +0000 | [diff] [blame] | 26 | |
| 27 | !named = !{!0} |
Duncan P. N. Exon Smith | 5bf8fef | 2014-12-09 18:38:53 +0000 | [diff] [blame] | 28 | ; CHECK: !named = !{![[NULL:[0-9]+]]} |
Alexey Samsonov | a1944e6 | 2013-10-07 19:03:24 +0000 | [diff] [blame] | 29 | |
Duncan P. N. Exon Smith | be7ea19 | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 30 | !0 = !{i8*** @G} |
Duncan P. N. Exon Smith | 9cbc69d | 2016-08-03 18:19:43 +0000 | [diff] [blame] | 31 | ; CHECK-DAG: ![[NULL]] = distinct !{null} |
Duncan P. N. Exon Smith | be7ea19 | 2014-12-15 19:07:53 +0000 | [diff] [blame] | 32 | ; CHECK-DAG: ![[EMPTY]] = !{} |