125 lines · plain
1; RUN: split-file %s %t2; RUN: opt -module-summary %t/a.ll -o %t/a.bc3; RUN: opt -module-summary %t/b.ll -o %t/b.bc4 5;; With a small limit, *_aux are either imported declarations (external/linkonce_odr/weak_odr)6;; or unimported (linkonce/weak). Check we discard dso_local.7; RUN: llvm-lto2 run %t/a.bc %t/b.bc -o %t1 -save-temps -import-instr-limit=3 \8; RUN: -r=%t/a.bc,main,plx -r=%t/a.bc,extern, -r=%t/a.bc,linkonce, -r=%t/a.bc,linkonceodr, -r=%t/a.bc,weak, -r=%t/a.bc,weakodr, \9; RUN: -r=%t/b.bc,a,pl -r=%t/b.bc,b,pl -r=%t/b.bc,extern,pl -r=%t/b.bc,extern_aux,pl \10; RUN: -r=%t/b.bc,linkonce,pl -r=%t/b.bc,linkonce_aux,pl -r=%t/b.bc,linkonceodr,pl -r=%t/b.bc,linkonceodr_aux,pl \11; RUN: -r=%t/b.bc,weak,pl -r=%t/b.bc,weak_aux,pl -r=%t/b.bc,weakodr,pl -r=%t/b.bc,weakodr_aux,pl12; RUN: llvm-dis %t1.1.3.import.bc -o - | FileCheck %s --check-prefixes=DEST,DEST113 14;; With a large limit, *_aux are either imported definitions (external/linkonce_odr/weak_odr)15;; or unimported (linkonce/weak). Check we discard dso_local as well.16; RUN: llvm-lto2 run %t/a.bc %t/b.bc -o %t2 -save-temps -import-instr-limit=10 \17; RUN: -r=%t/a.bc,main,plx -r=%t/a.bc,extern, -r=%t/a.bc,linkonce, -r=%t/a.bc,linkonceodr, -r=%t/a.bc,weak, -r=%t/a.bc,weakodr, \18; RUN: -r=%t/b.bc,a,pl -r=%t/b.bc,b,pl -r=%t/b.bc,extern,pl -r=%t/b.bc,extern_aux,pl \19; RUN: -r=%t/b.bc,linkonce,pl -r=%t/b.bc,linkonce_aux,pl -r=%t/b.bc,linkonceodr,pl -r=%t/b.bc,linkonceodr_aux,pl \20; RUN: -r=%t/b.bc,weak,pl -r=%t/b.bc,weak_aux,pl -r=%t/b.bc,weakodr,pl -r=%t/b.bc,weakodr_aux,pl21; RUN: llvm-dis %t2.1.3.import.bc -o - | FileCheck %s --check-prefixes=DEST,DEST222 23; DEST: @a = available_externally global i32 42, align 424; DEST-NEXT: @b = external global ptr, align 825; DEST: declare void @linkonce()26; DEST: declare void @weak()27; DEST: define dso_local i32 @main()28; DEST: define available_externally void @extern()29 30; DEST1: declare i32 @extern_aux(ptr, ptr)31; DEST1: declare i32 @linkonceodr_aux(ptr, ptr)32; DEST2: define available_externally i32 @extern_aux(ptr %a, ptr %b)33; DEST2: define available_externally i32 @linkonceodr_aux(ptr %a, ptr %b)34 35; DEST: define available_externally void @weakodr()36 37; DEST1: declare i32 @weakodr_aux(ptr, ptr)38; DEST2: define available_externally i32 @weakodr_aux(ptr %a, ptr %b)39 40;--- a.ll41target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"42target triple = "x86_64-unknown-linux-gnu"43 44declare void @extern()45declare void @linkonce()46declare void @linkonceodr()47declare void @weak()48declare void @weakodr()49 50define i32 @main() {51 call void @extern()52 call void @linkonce()53 call void @linkonceodr()54 call void @weak()55 call void @weakodr()56 ret i32 057}58 59;--- b.ll60target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"61target triple = "x86_64-unknown-linux-gnu"62 63@a = dso_local global i32 42, align 464@b = dso_local global ptr @a, align 865 66define dso_local void @extern() {67 call i32 @extern_aux(ptr @a, ptr @b)68 ret void69}70 71define dso_local i32 @extern_aux(ptr %a, ptr %b) {72 %p = load ptr, ptr %b, align 873 store i32 33, ptr %p, align 474 %v = load i32, ptr %a, align 475 ret i32 %v76}77 78define linkonce dso_local void @linkonce() {79 call i32 @linkonce_aux(ptr @a, ptr @b)80 ret void81}82 83define linkonce i32 @linkonce_aux(ptr %a, ptr %b) {84 %p = load ptr, ptr %b, align 885 store i32 33, ptr %p, align 486 %v = load i32, ptr %a, align 487 ret i32 %v88}89 90define linkonce_odr dso_local void @linkonceodr() {91 call i32 @linkonceodr_aux(ptr @a, ptr @b)92 ret void93}94 95define linkonce_odr i32 @linkonceodr_aux(ptr %a, ptr %b) {96 %p = load ptr, ptr %b, align 897 store i32 33, ptr %p, align 498 %v = load i32, ptr %a, align 499 ret i32 %v100}101 102define weak dso_local void @weak() {103 call i32 @weak_aux(ptr @a, ptr @b)104 ret void105}106 107define weak i32 @weak_aux(ptr %a, ptr %b) {108 %p = load ptr, ptr %b, align 8109 store i32 33, ptr %p, align 4110 %v = load i32, ptr %a, align 4111 ret i32 %v112}113 114define weak_odr dso_local void @weakodr() {115 call i32 @weakodr_aux(ptr @a, ptr @b)116 ret void117}118 119define weak_odr i32 @weakodr_aux(ptr %a, ptr %b) {120 %p = load ptr, ptr %b, align 8121 store i32 33, ptr %p, align 4122 %v = load i32, ptr %a, align 4123 ret i32 %v124}125