brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 81156c7 Raw
102 lines · plain
1;; Keep __profd_foo in a nodeduplicate comdat, despite a comdat of the same name2;; in a previous object file.3 4;; Regular LTO5 6; RUN: rm -rf %t && split-file %s %t7; RUN: llvm-as %t/a.ll -o %t/a.bc8; RUN: llvm-as %t/b.ll -o %t/b.bc9; RUN: llvm-as %t/c.ll -o %t/c.bc10 11; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext --plugin-opt=save-temps \12; RUN:   -u foo %t/a.bc --start-lib %t/b.bc --end-lib -o %t/ab13 14; RUN: FileCheck %s --check-prefix=RESOL_AB < %t/ab.resolution.txt15; RUN: llvm-readelf -x .data %t/ab | FileCheck %s --check-prefix=DATA16 17; RESOL_AB: -r={{.*}}b.bc,__profc_foo,pl{{$}}18 19;; .data contains a.bc:data. b.bc:data and c.bc:data are discarded.20; DATA: 0x[[#%x,]] 01000000 00000000  ........21 22;; __profc_foo from c.bc is non-prevailing and thus discarded.23; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext --plugin-opt=save-temps \24; RUN:   -u foo -u c %t/a.bc --start-lib %t/b.bc %t/c.bc --end-lib -o %t/abc25; RUN: FileCheck %s --check-prefix=RESOL_ABC < %t/abc.resolution.txt26; RUN: llvm-readelf -x .data %t/abc | FileCheck %s --check-prefix=DATA27 28; RESOL_ABC: -r={{.*}}b.bc,__profc_foo,pl{{$}}29; RESOL_ABC: -r={{.*}}c.bc,__profc_foo,l{{$}}30 31;; ThinLTO32 33; RUN: rm -rf %t && split-file %s %t34; RUN: opt --module-summary %t/a.ll -o %t/a.bc35; RUN: opt --module-summary %t/b.ll -o %t/b.bc36; RUN: opt --module-summary %t/c.ll -o %t/c.bc37 38;; gold from binutils>=2.27 discards b.bc:__profc_foo even in the absence of --gc-sections.39; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \40; RUN:   -u foo %t/a.bc --start-lib %t/b.bc %t/c.bc --end-lib -o %t/abc --gc-sections41; RUN: llvm-readelf -x .data %t/abc | FileCheck %s --check-prefix=DATA42 43;--- a.ll44target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"45target triple = "x86_64-unknown-linux-gnu"46 47$__profc_foo = comdat nodeduplicate48@__profc_foo = private global i64 1, comdat, align 849@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo), align 850 51declare void @b()52 53define i64 @foo() {54  %v = load i64, ptr @__profc_foo55  %inc = add i64 1, %v56  store i64 %inc, ptr @__profc_foo57  ret i64 %inc58}59 60define void @_start() {61  call void @b()62  ret void63}64 65;--- b.ll66target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"67target triple = "x86_64-unknown-linux-gnu"68 69$__profc_foo = comdat nodeduplicate70@__profc_foo = weak hidden global i64 2, comdat, align 871@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)72 73define weak i64 @foo() {74  %v = load i64, ptr @__profc_foo75  %inc = add i64 1, %v76  store i64 %inc, ptr @__profc_foo77  ret i64 %inc78}79 80define void @b() {81  ret void82}83 84;--- c.ll85target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"86target triple = "x86_64-unknown-linux-gnu"87 88$__profc_foo = comdat nodeduplicate89@__profc_foo = weak hidden global i64 3, comdat, align 890@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)91 92define weak i64 @foo() {93  %v = load i64, ptr @__profc_foo94  %inc = add i64 1, %v95  store i64 %inc, ptr @__profc_foo96  ret i64 %inc97}98 99define void @c() {100  ret void101}102