diff options
| author | Teresa Johnson <tejohnson@google.com> | 2016-05-10 13:48:23 +0000 |
|---|---|---|
| committer | Teresa Johnson <tejohnson@google.com> | 2016-05-10 13:48:23 +0000 |
| commit | 84174c3771e69214474b09e4afb26f10eef49245 (patch) | |
| tree | 1b8f50c93464050b2cc1b8a81b0c9ada4d91c82b /llvm/test | |
| parent | 7189b0fdb2d06b4107185428aee8c31157ee9c9c (diff) | |
| download | bcm5719-llvm-84174c3771e69214474b09e4afb26f10eef49245.tar.gz bcm5719-llvm-84174c3771e69214474b09e4afb26f10eef49245.zip | |
Restore "[ThinLTO] Emit individual index files for distributed backends"
This restores commit r268627:
Summary:
When launching ThinLTO backends in a distributed build (currently
supported in gold via the thinlto-index-only plugin option), emit
an individual index file for each backend process as described here:
http://lists.llvm.org/pipermail/llvm-dev/2016-April/098272.html
...
Differential Revision: http://reviews.llvm.org/D19556
Address msan failures by avoiding std::prev on map.end(), the
theory is that this is causing issues due to some known UB problems
in __tree.
llvm-svn: 269059
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll | 4 | ||||
| -rw-r--r-- | llvm/test/ThinLTO/X86/distributed_indexes.ll | 47 | ||||
| -rw-r--r-- | llvm/test/tools/gold/X86/thinlto.ll | 36 |
3 files changed, 86 insertions, 1 deletions
diff --git a/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll b/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll new file mode 100644 index 00000000000..4e0840f3691 --- /dev/null +++ b/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll @@ -0,0 +1,4 @@ +define void @g() { +entry: + ret void +} diff --git a/llvm/test/ThinLTO/X86/distributed_indexes.ll b/llvm/test/ThinLTO/X86/distributed_indexes.ll new file mode 100644 index 00000000000..0700488b5e9 --- /dev/null +++ b/llvm/test/ThinLTO/X86/distributed_indexes.ll @@ -0,0 +1,47 @@ +; RUN: opt -module-summary %s -o %t1.bc +; RUN: opt -module-summary %p/Inputs/distributed_indexes.ll -o %t2.bc +; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t1.bc %t2.bc +; RUN: llvm-lto -thinlto-action=distributedindexes -thinlto-index %t.index.bc %t1.bc %t2.bc +; RUN: llvm-bcanalyzer -dump %t1.bc.thinlto.bc | FileCheck %s --check-prefix=BACKEND1 +; RUN: llvm-bcanalyzer -dump %t2.bc.thinlto.bc | FileCheck %s --check-prefix=BACKEND2 + +; The backend index for this module contains summaries from itself and +; Inputs/distributed_indexes.ll, as it imports from the latter. +; BACKEND1: <MODULE_STRTAB_BLOCK +; BACKEND1-NEXT: <ENTRY {{.*}} record string = '{{.*}}distributed_indexes.ll.tmp{{.*}}.bc' +; BACKEND1-NEXT: <ENTRY {{.*}} record string = '{{.*}}distributed_indexes.ll.tmp{{.*}}.bc' +; BACKEND1-NEXT: </MODULE_STRTAB_BLOCK +; BACKEND1-NEXT: <GLOBALVAL_SUMMARY_BLOCK +; BACKEND1-NEXT: <VERSION +; BACKEND1-NEXT: <COMBINED +; BACKEND1-NEXT: <COMBINED +; BACKEND1-NEXT: </GLOBALVAL_SUMMARY_BLOCK +; BACKEND1-NEXT: <VALUE_SYMTAB +; Check that the format is: op0=valueid, op1=offset, op2=funcguid, +; where funcguid is the lower 64 bits of the function name MD5. +; BACKEND1-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0={{1|2}} op1={{-3706093650706652785|-5300342847281564238}} +; BACKEND1-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0={{1|2}} op1={{-3706093650706652785|-5300342847281564238}} +; BACKEND1-NEXT: </VALUE_SYMTAB + +; The backend index for Input/distributed_indexes.ll contains summaries from +; itself only, as it does not import anything. +; BACKEND2: <MODULE_STRTAB_BLOCK +; BACKEND2-NEXT: <ENTRY {{.*}} record string = '{{.*}}distributed_indexes.ll.tmp2.bc' +; BACKEND2-NEXT: </MODULE_STRTAB_BLOCK +; BACKEND2-NEXT: <GLOBALVAL_SUMMARY_BLOCK +; BACKEND2-NEXT: <VERSION +; BACKEND2-NEXT: <COMBINED +; BACKEND2-NEXT: </GLOBALVAL_SUMMARY_BLOCK +; BACKEND2-NEXT: <VALUE_SYMTAB +; Check that the format is: op0=valueid, op1=offset, op2=funcguid, +; where funcguid is the lower 64 bits of the function name MD5. +; BACKEND2-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0=1 op1=-5300342847281564238 +; BACKEND2-NEXT: </VALUE_SYMTAB + +declare void @g(...) + +define void @f() { +entry: + call void (...) @g() + ret void +} diff --git a/llvm/test/tools/gold/X86/thinlto.ll b/llvm/test/tools/gold/X86/thinlto.ll index 4bf8aa68aa5..09bf21d4a82 100644 --- a/llvm/test/tools/gold/X86/thinlto.ll +++ b/llvm/test/tools/gold/X86/thinlto.ll @@ -21,7 +21,8 @@ ; RUN: --plugin-opt=thinlto \ ; RUN: --plugin-opt=thinlto-index-only \ ; RUN: -shared %t.o %t2.o -o %t3 -; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED +; RUN: llvm-bcanalyzer -dump %t.o.thinlto.bc | FileCheck %s --check-prefix=BACKEND1 +; RUN: llvm-bcanalyzer -dump %t2.o.thinlto.bc | FileCheck %s --check-prefix=BACKEND2 ; RUN: not test -e %t3 ; Ensure gold generates an index as well as a binary by default in ThinLTO mode. @@ -53,6 +54,39 @@ ; NM: T f ; NM2: T {{f|g}} +; The backend index for this module contains summaries from itself and +; Inputs/thinlto.ll, as it imports from the latter. +; BACKEND1: <MODULE_STRTAB_BLOCK +; BACKEND1-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o' +; BACKEND1-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o' +; BACKEND1-NEXT: </MODULE_STRTAB_BLOCK +; BACKEND1-NEXT: <GLOBALVAL_SUMMARY_BLOCK +; BACKEND1-NEXT: <VERSION +; BACKEND1-NEXT: <COMBINED +; BACKEND1-NEXT: <COMBINED +; BACKEND1-NEXT: </GLOBALVAL_SUMMARY_BLOCK +; BACKEND1-NEXT: <VALUE_SYMTAB +; Check that the format is: op0=valueid, op1=offset, op2=funcguid, +; where funcguid is the lower 64 bits of the function name MD5. +; BACKEND1-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0={{1|2}} op1={{-3706093650706652785|-5300342847281564238}} +; BACKEND1-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0={{1|2}} op1={{-3706093650706652785|-5300342847281564238}} +; BACKEND1-NEXT: </VALUE_SYMTAB + +; The backend index for Input/thinlto.ll contains summaries from itself only, +; as it does not import anything. +; BACKEND2: <MODULE_STRTAB_BLOCK +; BACKEND2-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp2.o' +; BACKEND2-NEXT: </MODULE_STRTAB_BLOCK +; BACKEND2-NEXT: <GLOBALVAL_SUMMARY_BLOCK +; BACKEND2-NEXT: <VERSION +; BACKEND2-NEXT: <COMBINED +; BACKEND2-NEXT: </GLOBALVAL_SUMMARY_BLOCK +; BACKEND2-NEXT: <VALUE_SYMTAB +; Check that the format is: op0=valueid, op1=offset, op2=funcguid, +; where funcguid is the lower 64 bits of the function name MD5. +; BACKEND2-NEXT: <COMBINED_ENTRY abbrevid={{[0-9]+}} op0=1 op1=-5300342847281564238 +; BACKEND2-NEXT: </VALUE_SYMTAB + ; COMBINED: <MODULE_STRTAB_BLOCK ; COMBINED-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o' ; COMBINED-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o' |

