1 ;; This test is similar to llvm/test/ThinLTO/X86/selective-save-temps.ll
4 ; UNSUPPORTED: system-windows
5 ;; Unsupported on Windows due to difficulty with escaping "opt" across platforms.
6 ;; lit substitutes 'opt' with /path/to/opt.
8 ; RUN: rm -rf %t && mkdir %t && cd %t
9 ; RUN: mkdir all all2 all3 build subset subset2 && cd build
11 ; RUN: opt -thinlto-bc -o main.o %s
12 ; RUN: opt -thinlto-bc -o thin1.o %S/Inputs/thinlto.ll
14 ;; Create the .all dir with save-temps saving everything, this will be used to compare
15 ;; with the output from individualized save-temps later
16 ; RUN: ld.lld main.o thin1.o --save-temps -o %t/all/a.out
17 ; RUN: mv a.out.lto.* *.o.*.bc %t/all
18 ;; Sanity check that everything got moved
21 ;; Check precedence if both --save-temps and --save-temps= are present
22 ; RUN: ld.lld main.o thin1.o --save-temps=preopt --save-temps --save-temps=\opt -o %t/all2/a.out
23 ; RUN: cmp %t/all2/a.out %t/all/a.out
24 ; RUN: mv a.out.lto.* *.o.* %t/all2
26 ; RUN: diff -r %t/all %t/all2
28 ;; The next 9 blocks follow this structure:
29 ;; for each option of save-temps=
30 ;; Run linker and generate files
31 ;; Make sure a.out exists and is correct (by diff-ing)
32 ;; this is the only file that should recur between runs
33 ;; (Also, for some stages, copy the generated files to %t/subset2 to check composability later)
34 ;; Move files that were expected to be generated to %t/all3
35 ;; Make sure there's no unexpected extra files
36 ;; After that, we'll diff %t/all and %t/all3 to make sure all contents are identical
39 ; RUN: ld.lld main.o thin1.o --save-temps=preopt
40 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
41 ; RUN: cp *.0.preopt.* %t/subset2
42 ; RUN: mv *.0.preopt.* %t/all3
46 ; RUN: ld.lld main.o thin1.o --save-temps=promote
47 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
48 ; RUN: mv *.1.promote* %t/all3
52 ; RUN: ld.lld main.o thin1.o --save-temps=internalize
53 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
54 ; RUN: mv *.2.internalize* %t/all3
58 ; RUN: ld.lld main.o thin1.o --save-temps=import
59 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
60 ; RUN: mv *.3.import* %t/all3
64 ; RUN: ld.lld main.o thin1.o --save-temps=\opt
65 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
66 ; RUN: cp *.4.opt* %t/subset2
67 ; RUN: mv *.4.opt* %t/all3
71 ; RUN: ld.lld main.o thin1.o --save-temps=precodegen
72 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
73 ; RUN: mv *.5.precodegen* %t/all3
76 ;; Check combinedindex
77 ; RUN: ld.lld main.o thin1.o --save-temps=combinedindex
78 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
79 ; RUN: mv *.index.bc %t/all3
80 ; RUN: mv *.index.dot %t/all3
84 ; RUN: ld.lld main.o thin1.o --save-temps=prelink
85 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
86 ; RUN: cp a.out.lto.*.o %t/subset2
87 ; RUN: mv a.out.lto.*.o %t/all3
91 ; RUN: ld.lld main.o thin1.o --save-temps=resolution
92 ;; %t/all3 needs at least 1 copy of a.out, move it over now since its the last block
93 ; RUN: mv a.out %t/all3
94 ; RUN: mv *.resolution.txt %t/all3
97 ;; If no files were left out from individual stages, the .all3 dir should be identical to .all
98 ; RUN: diff -r %t/all %t/all3
100 ;; Check multi-stage composability
101 ;; Similar to the above, but do it with a subset instead.
102 ;; .all -> .subset, .all3 -> .subset2
103 ; RUN: ld.lld main.o thin1.o --save-temps=preopt --save-temps=prelink --save-temps=\opt
104 ; RUN: cmp %t/all/a.out a.out && rm -f a.out
105 ; RUN: mv *.0.preopt.* %t/subset
106 ; RUN: mv *.4.opt* %t/subset
107 ; RUN: mv a.out.lto.*.o %t/subset
109 ; RUN: diff -r %t/subset2 %t/subset
111 ;; Check error message
112 ; RUN: not ld.lld --save-temps=prelink --save-temps=\opt --save-temps=notastage 2>&1 \
113 ; RUN: | FileCheck %s
114 ; CHECK: unknown --save-temps value: notastage
116 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
117 target triple = "x86_64-unknown-linux-gnu"
121 define i32 @_start() {