brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 928da5c Raw
134 lines · plain
1; REQUIRES: x862 3;; Keep __profd_foo in a nodeduplicate comdat, despite a comdat of the same name4;; in a previous object file.5 6;; Regular LTO7 8; RUN: rm -rf %t && split-file %s %t9; RUN: llvm-as %t/a.ll -o %t/a.bc10; RUN: llvm-as %t/b.ll -o %t/b.bc11; RUN: llvm-as %t/c.ll -o %t/c.bc12 13; RUN: ld.lld --save-temps -u foo %t/a.bc --start-lib %t/b.bc --end-lib -o %t/ab14; 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: ld.lld --save-temps -u foo -u c %t/a.bc --start-lib %t/b.bc %t/c.bc --end-lib -o %t/abc24; RUN: FileCheck %s --check-prefix=RESOL_ABC < %t/abc.resolution.txt25; RUN: llvm-readelf -x .data %t/abc | FileCheck %s --check-prefix=DATA26 27; RESOL_ABC: -r={{.*}}b.bc,__profc_foo,pl{{$}}28; RESOL_ABC: -r={{.*}}c.bc,__profc_foo,{{$}}29 30;; ThinLTO31 32; RUN: rm -rf %t && split-file %s %t33; RUN: opt --module-summary %t/a.ll -o %t/a.bc34; RUN: opt --module-summary %t/b.ll -o %t/b.bc35; RUN: opt --module-summary %t/c.ll -o %t/c.bc36 37; RUN: ld.lld --thinlto-index-only --save-temps -u foo %t/a.bc %t/b.bc -o %t/ab38; RUN: FileCheck %s --check-prefix=RESOL_AB < %t/ab.resolution.txt39; RUN: llvm-dis < %t/b.bc > %t.out40; RUN: llvm-dis < %t/b.bc.thinlto.bc >> %t.out41; RUN: FileCheck %s --check-prefix=IR_AB --input-file %t.out42; RUN: ld.lld -u foo %t/a.bc %t/b.bc -o %t/ab43; RUN: llvm-readelf -x .data %t/ab | FileCheck %s --check-prefix=DATA44 45; RUN: ld.lld --thinlto-index-only --save-temps -u foo %t/a.bc --start-lib %t/b.bc --end-lib -o %t/ab46; RUN: FileCheck %s --check-prefix=RESOL_AB < %t/ab.resolution.txt47; RUN: llvm-dis < %t/b.bc > %t.out48; RUN: llvm-dis < %t/b.bc.thinlto.bc >> %t.out49; RUN: FileCheck %s --check-prefix=IR_AB --input-file %t.out50; RUN: ld.lld -u foo %t/a.bc --start-lib %t/b.bc --end-lib -o %t/ab51; RUN: llvm-readelf -x .data %t/ab | FileCheck %s --check-prefix=DATA52 53; RUN: ld.lld --thinlto-index-only --save-temps -u foo -u c %t/a.bc --start-lib %t/b.bc %t/c.bc --end-lib -o %t/abc54; RUN: FileCheck %s --check-prefix=RESOL_ABC < %t/abc.resolution.txt55; RUN: llvm-dis < %t/b.bc > %t.out56; RUN: llvm-dis < %t/b.bc.thinlto.bc >> %t.out57; RUN: FileCheck %s --check-prefix=IR_ABC --input-file %t.out58; RUN: ld.lld -u foo %t/a.bc --start-lib %t/b.bc %t/c.bc --end-lib -o %t/abc59; RUN: llvm-readelf -x .data %t/abc | FileCheck %s --check-prefix=DATA60 61; IR_AB-DAG: gv: (name: "__profd_foo", {{.*}} guid = [[PROFD:[0-9]+]]62; IR_AB-DAG: gv: (name: "__profc_foo", {{.*}} guid = [[PROFC:[0-9]+]]63 64;; Check extra attributes. b.bc:__profc_foo is prevailing, so it can be internalized.65; IR_AB-DAG: gv: (guid: [[PROFD]], summaries: (variable: (module: ^0, flags: (linkage: private, visibility: default, notEligibleToImport: 0, live: 0, dsoLocal: 1, canAutoHide: 0, importType: definition), varFlags: (readonly: 0, writeonly: 0, constant: 0),66; IR_AB-DAG: gv: (guid: [[PROFC]], summaries: (variable: (module: ^0, flags: (linkage: internal, visibility: hidden, notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 0, importType: definition), varFlags: (readonly: 0, writeonly: 0, constant: 0))))67 68; IR_ABC-DAG: gv: (name: "__profd_foo", {{.*}} guid = [[PROFD:[0-9]+]]69; IR_ABC-DAG: gv: (name: "__profc_foo", {{.*}} guid = [[PROFC:[0-9]+]]70 71;; b.bc:__profc_foo prevails c.bc:__profc_foo, so it is exported and therefore not internalized.72; IR_ABC-DAG: gv: (guid: [[PROFD]], summaries: (variable: (module: ^0, flags: (linkage: private, visibility: default, notEligibleToImport: 0, live: 0, dsoLocal: 1, canAutoHide: 0, importType: definition), varFlags: (readonly: 0, writeonly: 0, constant: 0),73; IR_ABC-DAG: gv: (guid: [[PROFC]], summaries: (variable: (module: ^0, flags: (linkage: weak, visibility: hidden, notEligibleToImport: 0, live: 1, dsoLocal: 1, canAutoHide: 0, importType: definition), varFlags: (readonly: 0, writeonly: 0, constant: 0))))74 75;--- a.ll76target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"77target triple = "x86_64-unknown-linux-gnu"78 79$__profc_foo = comdat nodeduplicate80@__profc_foo = private global i64 1, comdat, align 881@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo), align 882 83declare void @b()84 85define i64 @foo() {86  %v = load i64, ptr @__profc_foo87  %inc = add i64 1, %v88  store i64 %inc, ptr @__profc_foo89  ret i64 %inc90}91 92define void @_start() {93  call void @b()94  ret void95}96 97;--- b.ll98target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"99target triple = "x86_64-unknown-linux-gnu"100 101$__profc_foo = comdat nodeduplicate102@__profc_foo = weak hidden global i64 2, comdat, align 8103@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)104 105define weak i64 @foo() {106  %v = load i64, ptr @__profc_foo107  %inc = add i64 1, %v108  store i64 %inc, ptr @__profc_foo109  ret i64 %inc110}111 112define void @b() {113  ret void114}115 116;--- c.ll117target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"118target triple = "x86_64-unknown-linux-gnu"119 120$__profc_foo = comdat nodeduplicate121@__profc_foo = weak hidden global i64 3, comdat, align 8122@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)123 124define weak i64 @foo() {125  %v = load i64, ptr @__profc_foo126  %inc = add i64 1, %v127  store i64 %inc, ptr @__profc_foo128  ret i64 %inc129}130 131define void @c() {132  ret void133}134