1; Without -only-needed we should lazy link linkonce globals, and the
2; metadata reference should not cause them to be linked.
3; RUN: llvm-link -S %S/Inputs/only-needed-named-metadata.ll %S/only-needed-named-metadata.ll | FileCheck %s
4; CHECK-NOT:@U_linkonce
5; CHECK-NOT:@unused_linkonce()
6
7; With -only-needed the metadata references should not cause any of the
8; otherwise unreferenced globals to be linked. This also ensures that the
9; metadata references don't provoke the module linker to create declarations,
10; which are illegal for aliases and globals in comdats.
11; Note that doing -only-needed with the comdat shown below leads to a only
12; part of the comdat group being linked, which is not technically correct.
13; RUN: llvm-link -S -only-needed %S/Inputs/only-needed-named-metadata.ll %S/only-needed-named-metadata.ll | FileCheck %s -check-prefix=ONLYNEEDED
14; RUN: llvm-link -S -internalize -only-needed %S/Inputs/only-needed-named-metadata.ll %S/only-needed-named-metadata.ll | FileCheck %s -check-prefix=ONLYNEEDED
15; ONLYNEEDED-NOT:@U
16; ONLYNEEDED-NOT:@U_linkonce
17; ONLYNEEDED-NOT:@unused()
18; ONLYNEEDED-NOT:@unused_linkonce()
19; ONLYNEEDED-NOT:@linkoncealias
20; ONLYNEEDED-NOT:@linkoncefunc2()
21; ONLYNEEDED-NOT:@weakalias
22; ONLYNEEDED-NOT:@globalfunc1()
23; ONLYNEEDED-NOT:@analias
24; ONLYNEEDED-NOT:@globalfunc2()
25
26; Test -only-needed link with the modules preserved instead of freeing to
27; catch any cross-module references to metadata, which the bitcode writer
28; will assert on.
29; RUN: llvm-link -preserve-modules -o %t3.bc -only-needed %S/Inputs/only-needed-named-metadata.ll %S/only-needed-named-metadata.ll
30
31@X = global i32 5
32@U = global i32 6
33@U_linkonce = linkonce_odr hidden global i32 6
34define i32 @foo() { ret i32 7 }
35define i32 @unused() { ret i32 8 }
36define linkonce_odr hidden i32 @unused_linkonce() { ret i32 8 }
37@linkoncealias = alias void (...), bitcast (void ()* @linkoncefunc2 to void (...)*)
38
39@weakalias = weak alias void (...), bitcast (void ()* @globalfunc1 to void (...)*)
40@analias = alias void (...), bitcast (void ()* @globalfunc2 to void (...)*)
41
42define void @globalfunc1() #0 {
43entry:
44  ret void
45}
46
47define void @globalfunc2() #0 {
48entry:
49  ret void
50}
51
52$linkoncefunc2 = comdat any
53define linkonce_odr void @linkoncefunc2() #0 comdat {
54entry:
55  ret void
56}
57
58!llvm.named = !{!0, !1, !2, !3, !4, !5, !6}
59!0 = !{i32 ()* @unused}
60!1 = !{i32* @U}
61!2 = !{i32 ()* @unused_linkonce}
62!3 = !{i32* @U_linkonce}
63!4 = !{void (...)* @weakalias}
64!5 = !{void (...)* @analias}
65!6 = !{void (...)* @linkoncealias}
66