brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 553f6d4 Raw
61 lines · plain
1; Without -only-needed we should lazy link linkonce globals, and the2; 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 %s4; CHECK-NOT:@U_linkonce5; CHECK-NOT:@unused_linkonce()6 7; With -only-needed the metadata references should not cause any of the8; otherwise unreferenced globals to be linked. This also ensures that the9; 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 only12; 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=ONLYNEEDED14; RUN: llvm-link -S -internalize -only-needed %S/Inputs/only-needed-named-metadata.ll %S/only-needed-named-metadata.ll | FileCheck %s -check-prefix=ONLYNEEDED15; ONLYNEEDED-NOT:@U16; ONLYNEEDED-NOT:@U_linkonce17; ONLYNEEDED-NOT:@unused()18; ONLYNEEDED-NOT:@unused_linkonce()19; ONLYNEEDED-NOT:@linkoncealias20; ONLYNEEDED-NOT:@linkoncefunc2()21; ONLYNEEDED-NOT:@weakalias22; ONLYNEEDED-NOT:@globalfunc1()23; ONLYNEEDED-NOT:@analias24; ONLYNEEDED-NOT:@globalfunc2()25 26@X = global i32 527@U = global i32 628@U_linkonce = linkonce_odr hidden global i32 629define i32 @foo() { ret i32 7 }30define i32 @unused() { ret i32 8 }31define linkonce_odr hidden i32 @unused_linkonce() { ret i32 8 }32@linkoncealias = alias void (...), ptr @linkoncefunc233 34@weakalias = weak alias void (...), ptr @globalfunc135@analias = alias void (...), ptr @globalfunc236 37define void @globalfunc1() #0 {38entry:39  ret void40}41 42define void @globalfunc2() #0 {43entry:44  ret void45}46 47$linkoncefunc2 = comdat any48define linkonce_odr void @linkoncefunc2() #0 comdat {49entry:50  ret void51}52 53!llvm.named = !{!0, !1, !2, !3, !4, !5, !6}54!0 = !{ptr @unused}55!1 = !{ptr @U}56!2 = !{ptr @unused_linkonce}57!3 = !{ptr @U_linkonce}58!4 = !{ptr @weakalias}59!5 = !{ptr @analias}60!6 = !{ptr @linkoncealias}61