129 lines · plain
1; REQUIRES: x862; RUN: rm -rf %t; split-file %s %t3;; This test covers both FullLTO and ThinLTO code paths because we have observed4;; (unexpected) differences between the two.5; RUN: llvm-as %t/test.ll -o %t/test.o6; RUN: llvm-as %t/test2.ll -o %t/test2.o7; RUN: opt -module-summary %t/test.ll -o %t/test.thinlto.o8; RUN: opt -module-summary %t/test2.ll -o %t/test2.thinlto.o9 10; RUN: %lld -lSystem %t/test.o %t/test2.o -o %t/test -save-temps11; RUN: llvm-dis < %t/test.0.2.internalize.bc | FileCheck %s --check-prefix=LTO-BC12; RUN: llvm-nm -m %t/test | FileCheck %s --check-prefix=LTO13 14; RUN: %lld -lSystem -dylib %t/test.o %t/test2.o -o %t/test.dylib -save-temps15; RUN: llvm-dis < %t/test.dylib.0.2.internalize.bc | FileCheck %s --check-prefix=LTO-BC-DYLIB16; RUN: llvm-nm -m %t/test.dylib | FileCheck %s --check-prefix=LTO-DYLIB17 18; RUN: %lld -lSystem %t/test.thinlto.o %t/test2.thinlto.o -o %t/test.thinlto \19; RUN: -save-temps20; RUN: llvm-dis < %t/test.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC21; RUN: llvm-dis < %t/test2.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC-222; RUN: llvm-nm -m %t/test.thinlto | FileCheck %s --check-prefix=THINLTO23 24; RUN: %lld -lSystem -dylib %t/test.thinlto.o %t/test2.thinlto.o -o \25; RUN: %t/test.thinlto.dylib -save-temps26; RUN: llvm-dis < %t/test.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC-DYLIB27; RUN: llvm-dis < %t/test2.thinlto.o.2.internalize.bc | FileCheck %s --check-prefix=THINLTO-BC-228; RUN: llvm-nm -m %t/test.thinlto.dylib | FileCheck %s --check-prefix=THINLTO-DYLIB29 30; LTO-BC-DAG: @global_unnamed = internal unnamed_addr global i8 4231; LTO-BC-DAG: @global_unnamed_sometimes_linkonce = internal unnamed_addr global i8 4232; LTO-BC-DAG: @local_unnamed_const = internal constant i8 4233; LTO-BC-DAG: @local_unnamed = internal global i8 4234; LTO-BC-DAG: @local_unnamed_always_const = internal constant i8 4235; LTO-BC-DAG: @local_unnamed_sometimes_const = internal constant i8 4236 37; LTO-BC-DYLIB-DAG: @global_unnamed = internal unnamed_addr global i8 4238; LTO-BC-DYLIB-DAG: @local_unnamed_const = internal constant i8 4239; LTO-BC-DYLIB-DAG: @local_unnamed = weak_odr global i8 4240; LTO-BC-DYLIB-DAG: @global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 4241; LTO-BC-DYLIB-DAG: @local_unnamed_always_const = internal constant i8 4242; LTO-BC-DYLIB-DAG: @local_unnamed_sometimes_const = weak_odr constant i8 4243 44; THINLTO-BC-DAG: @global_unnamed = internal unnamed_addr global i8 4245; THINLTO-BC-DAG: @global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 4246; THINLTO-BC-DAG: @local_unnamed_const = internal local_unnamed_addr constant i8 4247; THINLTO-BC-DAG: @local_unnamed_always_const = weak_odr hidden local_unnamed_addr constant i8 4248; THINLTO-BC-DAG: @local_unnamed_sometimes_const = weak_odr local_unnamed_addr constant i8 4249; THINLTO-BC-DAG: @local_unnamed = internal local_unnamed_addr global i8 4250 51; THINLTO-BC-DYLIB-DAG: @global_unnamed = internal unnamed_addr global i8 4252; THINLTO-BC-DYLIB-DAG: @global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 4253; THINLTO-BC-DYLIB-DAG: @local_unnamed_const = internal local_unnamed_addr constant i8 4254; THINLTO-BC-DYLIB-DAG: @local_unnamed_always_const = weak_odr hidden local_unnamed_addr constant i8 4255; THINLTO-BC-DYLIB-DAG: @local_unnamed_sometimes_const = weak_odr local_unnamed_addr constant i8 4256; THINLTO-BC-DYLIB-DAG: @local_unnamed = weak_odr local_unnamed_addr global i8 4257 58; THINLTO-BC-2-DAG: @global_unnamed_sometimes_linkonce = available_externally unnamed_addr global i8 4259; THINLTO-BC-2-DAG: @local_unnamed_always_const = available_externally local_unnamed_addr constant i8 4260; THINLTO-BC-2-DAG: @local_unnamed_sometimes_const = available_externally local_unnamed_addr global i8 4261 62; LTO-DAG: (__DATA,__data) non-external _global_unnamed63; LTO-DAG: (__DATA,__data) non-external _global_unnamed_sometimes_linkonce64; LTO-DAG: (__DATA,__data) non-external _local_unnamed65;; LD64 marks this with (was a private external). IMO both LD64 and LLD should66;; mark all the other internalized symbols with (was a private external).67; LTO-DAG: (__TEXT,__const) non-external _local_unnamed_always_const68; LTO-DAG: (__TEXT,__const) non-external _local_unnamed_const69;; LD64 doesn't internalize this -- it emits it as a weak external -- which I70;; think is a missed optimization on its end.71; LTO-DAG: (__TEXT,__const) non-external _local_unnamed_sometimes_const72 73;; The output here is largely identical to LD64's, except that the non-external74;; symbols here are all marked as (was a private external) by LD64. LLD should75;; follow suit.76; LTO-DYLIB-DAG: (__DATA,__data) non-external _global_unnamed77; LTO-DYLIB-DAG: (__DATA,__data) weak external _global_unnamed_sometimes_linkonce78; LTO-DYLIB-DAG: (__DATA,__data) weak external _local_unnamed79; LTO-DYLIB-DAG: (__TEXT,__const) non-external _local_unnamed_always_const80; LTO-DYLIB-DAG: (__TEXT,__const) non-external _local_unnamed_const81; LTO-DYLIB-DAG: (__TEXT,__const) weak external _local_unnamed_sometimes_const82 83; THINLTO-DAG: (__DATA,__data) non-external _global_unnamed84;; FIXME: This next symbol should probably be internalized, just like it is85;; under fullLTO.86; THINLTO-DAG: (__DATA,__data) weak external _global_unnamed_sometimes_linkonce87; THINLTO-DAG: (__DATA,__data) non-external _local_unnamed88; THINLTO-DAG: (__TEXT,__const) non-external (was a private external) _local_unnamed_always_const89; THINLTO-DAG: (__TEXT,__const) non-external _local_unnamed_const90;; LD64 actually fails to link when the following symbol is included in the test91;; input, instead producing this error:92;; reference to bitcode symbol '_local_unnamed_sometimes_const' which LTO has not compiled in '_used' from /tmp/lto.o for architecture x86_6493; THINLTO-DAG: (__TEXT,__const) weak external _local_unnamed_sometimes_const94 95; THINLTO-DYLIB-DAG: (__DATA,__data) non-external _global_unnamed96; THINLTO-DYLIB-DAG: (__DATA,__data) weak external _global_unnamed_sometimes_linkonce97; THINLTO-DYLIB-DAG: (__DATA,__data) weak external _local_unnamed98; THINLTO-DYLIB-DAG: (__TEXT,__const) non-external (was a private external) _local_unnamed_always_const99; THINLTO-DYLIB-DAG: (__TEXT,__const) non-external _local_unnamed_const100; THINLTO-DYLIB-DAG: (__TEXT,__const) weak external _local_unnamed_sometimes_const101 102;--- test.ll103target triple = "x86_64-apple-darwin"104target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"105 106@global_unnamed = linkonce_odr unnamed_addr global i8 42107@global_unnamed_sometimes_linkonce = linkonce_odr unnamed_addr global i8 42108@local_unnamed_const = linkonce_odr local_unnamed_addr constant i8 42109@local_unnamed_always_const = linkonce_odr local_unnamed_addr constant i8 42110@local_unnamed_sometimes_const = linkonce_odr local_unnamed_addr constant i8 42111@local_unnamed = linkonce_odr local_unnamed_addr global i8 42112@used = hidden constant [6 x ptr] [ptr @global_unnamed,113 ptr @global_unnamed_sometimes_linkonce, ptr @local_unnamed,114 ptr @local_unnamed_const, ptr @local_unnamed_always_const,115 ptr @local_unnamed_sometimes_const]116@llvm.used = appending global [1 x ptr] [ptr @used]117 118define void @main() {119 ret void120}121 122;--- test2.ll123target triple = "x86_64-apple-darwin"124target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"125 126@global_unnamed_sometimes_linkonce = weak_odr unnamed_addr global i8 42127@local_unnamed_always_const = linkonce_odr local_unnamed_addr constant i8 42128@local_unnamed_sometimes_const = linkonce_odr local_unnamed_addr global i8 42129