122 lines · plain
1; REQUIRES: x862; RUN: rm -rf %t; split-file %s %t3 4;; Mostly copied/updated from thinlto-index-only.ll5;; First ensure that the ThinLTO handling in lld handles6;; bitcode without summary sections gracefully and generates index file.7; RUN: llvm-as %t/f.ll -o %t/1.o8; RUN: llvm-as %t/g.ll -o %t/2.o9; RUN: %lld --thinlto-emit-index-files -dylib %t/1.o %t/2.o -o %t/310; RUN: ls %t/2.o.thinlto.bc11; RUN: ls %t/312; RUN: %lld -dylib %t/1.o %t/2.o -o %t/313; RUN: llvm-nm %t/3 | FileCheck %s --check-prefix=NM14 15;; Basic ThinLTO tests.16; RUN: opt -module-summary %t/f.ll -o %t/1.o17; RUN: opt -module-summary %t/g.ll -o %t/2.o18; RUN: opt -module-summary %t/empty.ll -o %t/3.o19 20;; Ensure lld generates an index and also a binary if requested.21; RUN: %lld --thinlto-emit-index-files -dylib %t/1.o %t/2.o -o %t/422; RUN: llvm-bcanalyzer -dump %t/1.o.thinlto.bc | FileCheck %s -DP1=%t/1.o -DP2=%t/2.o --check-prefix=BACKEND123; RUN: llvm-bcanalyzer -dump %t/2.o.thinlto.bc | FileCheck %s -DP2=%t/2.o --check-prefix=BACKEND224; RUN: ls %t/425 26;; Ensure lld generates an index and not a binary if both emit-index and index-only are present.27; RUN: %lld --thinlto-emit-index-files --thinlto-index-only -dylib %t/1.o %t/2.o -o %t/528; RUN: not ls %t/529 30;; Ensure lld generates an index even if the file is wrapped in --start-lib/--end-lib31; RUN: rm -f %t/2.o.thinlto.bc32; RUN: %lld --thinlto-emit-index-files -dylib %t/1.o %t/3.o --start-lib %t/2.o --end-lib -o %t/633; RUN: llvm-dis < %t/2.o.thinlto.bc | grep -q '\^0 = module:'34; RUN: ls %t/635 36;; Test that LLD generates an empty index even for lazy object file that is not added to link.37;; Test that LLD also generates empty imports file with the --thinlto-emit-imports-files option.38; RUN: rm -f %t/1.o.thinlto.bc %t/1.o.imports39; RUN: %lld --thinlto-emit-index-files -dylib %t/2.o --start-lib %t/1.o --end-lib \40; RUN: --thinlto-emit-imports-files -o %t/741; RUN: ls %t/742; RUN: ls %t/1.o.thinlto.bc43; RUN: ls %t/1.o.imports44 45;; Ensure LLD generates an empty index for each bitcode file even if all bitcode files are lazy.46; RUN: rm -f %t/dummy.o %t/1.o.thinlto.bc47; RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin /dev/null -o %t/dummy.o48; RUN: %lld --thinlto-emit-index-files -dylib %t/dummy.o --start-lib %t/1.o --end-lib -o %t/849; RUN: ls %t/850; RUN: ls %t/1.o.thinlto.bc51 52;; Test that LLD errors out when run with suffix replacement, or prefix replacement53; RUN: not %lld --thinlto-emit-index-files -dylib %t/2.o --start-lib %t/1.o --end-lib \54; RUN: --thinlto-prefix-replace="abc;xyz" 2>&1 | FileCheck %s --check-prefix=ERR155; ERR1: --thinlto-prefix-replace is not supported with --thinlto-emit-index-files56 57; RUN: not %lld --thinlto-emit-index-files -dylib %t/2.o --start-lib %t/1.o --end-lib \58; RUN: --thinlto-object-suffix-replace="abc;xyz" 2>&1 | FileCheck %s --check-prefix=ERR259; ERR2: --thinlto-object-suffix-replace is not supported with --thinlto-emit-index-files60 61;; But not when passed with index only as well62; RUN: %lld --thinlto-emit-index-files -dylib %t/2.o --start-lib %t/1.o --end-lib \63; RUN: --thinlto-prefix-replace="abc;xyz" --thinlto-index-only64 65; RUN: %lld --thinlto-emit-index-files -dylib %t/2.o --start-lib %t/1.o --end-lib \66; RUN: --thinlto-object-suffix-replace="abc;xyz" --thinlto-index-only67 68; NM: T _f69 70;; The backend index for this module contains summaries from itself and71;; Inputs/thinlto.ll, as it imports from the latter.72; BACKEND1: <MODULE_STRTAB_BLOCK73; BACKEND1-NEXT: <ENTRY {{.*}} record string = '[[P1]]'74; BACKEND1-NEXT: <ENTRY {{.*}} record string = '[[P2]]'75; BACKEND1-NEXT: </MODULE_STRTAB_BLOCK76; BACKEND1: <GLOBALVAL_SUMMARY_BLOCK77; BACKEND1: <VERSION78; BACKEND1: <FLAGS79; BACKEND1: <VALUE_GUID {{.*}} op0={{1|2}} {{op1=3060885059 op2=1207956914|op1=3432075125 op2=3712786831}}80; BACKEND1: <VALUE_GUID {{.*}} op0={{1|2}} {{op1=3060885059 op2=1207956914|op1=3432075125 op2=3712786831}}81; BACKEND1: <COMBINED82; BACKEND1: <COMBINED83; BACKEND1: </GLOBALVAL_SUMMARY_BLOCK84 85;; The backend index for Input/thinlto.ll contains summaries from itself only,86;; as it does not import anything.87; BACKEND2: <MODULE_STRTAB_BLOCK88; BACKEND2-NEXT: <ENTRY {{.*}} record string = '[[P2]]'89; BACKEND2-NEXT: </MODULE_STRTAB_BLOCK90; BACKEND2-NEXT: <GLOBALVAL_SUMMARY_BLOCK91; BACKEND2-NEXT: <VERSION92; BACKEND2-NEXT: <FLAGS93; BACKEND2-NEXT: <VALUE_GUID {{.*}} op0=1 op1=3060885059 op2=120795691494; BACKEND2-NEXT: <COMBINED95; BACKEND2-NEXT: </GLOBALVAL_SUMMARY_BLOCK96 97 98;--- f.ll99target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"100target triple = "x86_64-apple-darwin"101 102declare void @g(...)103 104define void @f() {105entry:106 call void (...) @g()107 ret void108}109 110;--- g.ll111target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"112target triple = "x86_64-apple-darwin"113 114define void @g() {115entry:116 ret void117}118 119;--- empty.ll120target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"121target triple = "x86_64-apple-darwin"122