mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
a2f6e4d840
Summary: 1. Use stream 0 only for combined module. Previously if combined module was not processes ThinLTO used the stream for own output. However small changes in input, could trigger combined module and shuffle outputs making life of llvm::LTO harder. 2. Always process combined module and write output to stream 0. Processing empty combined module is cheap and allows llvm::LTO users to avoid implementing processing which is already done in llvm::LTO. Subscribers: mehdi_amini, inglorion, eraman, hiraditya Differential Revision: https://reviews.llvm.org/D41267 llvm-svn: 320905
97 lines
3.7 KiB
LLVM
97 lines
3.7 KiB
LLVM
; Test distributed build thin link output from llvm-lto2
|
|
|
|
; Generate bitcode files with summary, as well as minimized bitcode without
|
|
; the debug metadata for the thin link.
|
|
; RUN: opt -thinlto-bc %s -thin-link-bitcode-file=%t1.thinlink.bc -o %t1.bc
|
|
; RUN: opt -thinlto-bc %p/Inputs/distributed_import.ll -thin-link-bitcode-file=%t2.thinlink.bc -o %t2.bc
|
|
; RUN: llvm-bcanalyzer -dump %t1.thinlink.bc | FileCheck --check-prefix=THINLINKBITCODE %s
|
|
|
|
; First perform the thin link on the normal bitcode file.
|
|
; RUN: llvm-lto2 run %t1.bc %t2.bc -o %t.o -save-temps \
|
|
; RUN: -thinlto-distributed-indexes \
|
|
; RUN: -r=%t1.bc,g, \
|
|
; RUN: -r=%t1.bc,analias, \
|
|
; RUN: -r=%t1.bc,f,px \
|
|
; RUN: -r=%t2.bc,g,px \
|
|
; RUN: -r=%t2.bc,analias,px \
|
|
; RUN: -r=%t2.bc,aliasee,px
|
|
; RUN: opt -function-import -import-all-index -enable-import-metadata -summary-file %t1.bc.thinlto.bc %t1.bc -o %t1.out
|
|
; RUN: opt -function-import -import-all-index -summary-file %t2.bc.thinlto.bc %t2.bc -o %t2.out
|
|
; RUN: llvm-dis -o - %t1.out | FileCheck %s --check-prefix=IMPORT
|
|
; RUN: llvm-dis -o - %t2.out | FileCheck %s --check-prefix=EXPORT
|
|
|
|
; Save the generated index files.
|
|
; RUN: cp %t1.bc.thinlto.bc %t1.bc.thinlto.bc.orig
|
|
; RUN: cp %t2.bc.thinlto.bc %t2.bc.thinlto.bc.orig
|
|
|
|
; Copy the minimized bitcode to the regular bitcode path so the module
|
|
; paths in the index are the same (save the regular bitcode for use again
|
|
; further down).
|
|
; RUN: cp %t1.bc %t1.bc.sv
|
|
; RUN: cp %t1.thinlink.bc %t1.bc
|
|
; RUN: cp %t2.bc %t2.bc.sv
|
|
; RUN: cp %t2.thinlink.bc %t2.bc
|
|
|
|
; Next perform the thin link on the minimized bitcode files, and compare dumps
|
|
; of the resulting indexes to the above dumps to ensure they are identical.
|
|
; RUN: rm -f %t1.bc.thinlto.bc %t2.bc.thinlto.bc
|
|
; RUN: llvm-lto2 run %t1.bc %t2.bc -o %t.o -save-temps \
|
|
; RUN: -thinlto-distributed-indexes \
|
|
; RUN: -r=%t1.bc,g, \
|
|
; RUN: -r=%t1.bc,analias, \
|
|
; RUN: -r=%t1.bc,f,px \
|
|
; RUN: -r=%t2.bc,g,px \
|
|
; RUN: -r=%t2.bc,analias,px \
|
|
; RUN: -r=%t2.bc,aliasee,px
|
|
; RUN: diff %t1.bc.thinlto.bc.orig %t1.bc.thinlto.bc
|
|
; RUN: diff %t2.bc.thinlto.bc.orig %t2.bc.thinlto.bc
|
|
|
|
; Make sure importing occurs as expected
|
|
; RUN: cp %t1.bc.sv %t1.bc
|
|
; RUN: cp %t2.bc.sv %t2.bc
|
|
; RUN: opt -function-import -import-all-index -enable-import-metadata -summary-file %t1.bc.thinlto.bc %t1.bc -o %t1.out
|
|
; RUN: opt -function-import -import-all-index -summary-file %t2.bc.thinlto.bc %t2.bc -o %t2.out
|
|
; RUN: llvm-dis -o - %t1.out | FileCheck %s --check-prefix=IMPORT
|
|
; RUN: llvm-dis -o - %t2.out | FileCheck %s --check-prefix=EXPORT
|
|
|
|
; IMPORT: define available_externally i32 @g() !thinlto_src_module
|
|
; IMPORT: define available_externally void @analias() !thinlto_src_module
|
|
; EXPORT: @G.llvm.
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
declare i32 @g(...)
|
|
declare void @analias(...)
|
|
|
|
define void @f() {
|
|
entry:
|
|
call i32 (...) @g()
|
|
call void (...) @analias()
|
|
ret void
|
|
}
|
|
|
|
; THINLINKBITCODE-NOT: IDENTIFICATION_BLOCK_ID
|
|
; THINLINKBITCODE-NOT: BLOCKINFO_BLOCK
|
|
; THINLINKBITCODE-NOT: TYPE_BLOCK_ID
|
|
; THINLINKBITCODE-NOT: VSTOFFSET
|
|
; THINLINKBITCODE-NOT: CONSTANTS_BLOCK
|
|
; THINLINKBITCODE-NOT: METADATA_KIND_BLOCK
|
|
; THINLINKBITCODE-NOT: METADATA_BLOCK
|
|
; THINLINKBITCODE-NOT: OPERAND_BUNDLE_TAGS_BLOCK
|
|
; THINLINKBITCODE-NOT: UnknownBlock26
|
|
; THINLINKBITCODE-NOT: FUNCTION_BLOCK
|
|
; THINLINKBITCODE-NOT: VALUE_SYMTAB
|
|
; THINLINKBITCODE: MODULE_BLOCK
|
|
; THINLINKBITCODE: VERSION
|
|
; THINLINKBITCODE: SOURCE_FILENAME
|
|
; THINLINKBITCODE: GLOBALVAL_SUMMARY_BLOCK
|
|
; THINLINKBITCODE: HASH
|
|
; THINLINKBITCODE: SYMTAB_BLOCK
|
|
; THINLINKBITCODE: STRTAB_BLOCK
|
|
|
|
!llvm.dbg.cu = !{}
|
|
|
|
!1 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!llvm.module.flags = !{!1}
|