]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Driver/openmp-offload.c
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / Driver / openmp-offload.c
1 ///
2 /// Perform several driver tests for OpenMP offloading
3 ///
4
5 // REQUIRES: clang-driver
6 // REQUIRES: x86-registered-target
7 // REQUIRES: powerpc-registered-target
8 // REQUIRES: nvptx-registered-target
9
10 /// ###########################################################################
11
12 /// Check whether an invalid OpenMP target is specified:
13 // RUN:   %clang -### -fopenmp=libomp -fopenmp-targets=aaa-bbb-ccc-ddd %s 2>&1 \
14 // RUN:   | FileCheck -check-prefix=CHK-INVALID-TARGET %s
15 // CHK-INVALID-TARGET: error: OpenMP target is invalid: 'aaa-bbb-ccc-ddd'
16
17 /// ###########################################################################
18
19 /// Check warning for empty -fopenmp-targets
20 // RUN:   %clang -### -fopenmp=libomp -fopenmp-targets=  %s 2>&1 \
21 // RUN:   | FileCheck -check-prefix=CHK-EMPTY-OMPTARGETS %s
22 // CHK-EMPTY-OMPTARGETS: warning: joined argument expects additional value: '-fopenmp-targets='
23
24 /// ###########################################################################
25
26 /// Check error for no -fopenmp option
27 // RUN:   %clang -### -fopenmp-targets=powerpc64le-ibm-linux-gnu  %s 2>&1 \
28 // RUN:   | FileCheck -check-prefix=CHK-NO-FOPENMP %s
29 // RUN:   %clang -### -fopenmp=libgomp -fopenmp-targets=powerpc64le-ibm-linux-gnu  %s 2>&1 \
30 // RUN:   | FileCheck -check-prefix=CHK-NO-FOPENMP %s
31 // CHK-NO-FOPENMP: error: The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.
32
33 /// ###########################################################################
34
35 /// Check warning for duplicate offloading targets.
36 // RUN:   %clang -### -ccc-print-phases -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu,powerpc64le-ibm-linux-gnu  %s 2>&1 \
37 // RUN:   | FileCheck -check-prefix=CHK-DUPLICATES %s
38 // CHK-DUPLICATES: warning: The OpenMP offloading target 'powerpc64le-ibm-linux-gnu' is similar to target 'powerpc64le-ibm-linux-gnu' already specified - will be ignored.
39
40 /// ###########################################################################
41
42 /// Check -Xopenmp-target=powerpc64le-ibm-linux-gnu -mcpu=pwr7 is passed when compiling for the device.
43 // RUN:   %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu -Xopenmp-target=powerpc64le-ibm-linux-gnu -mcpu=pwr7 %s 2>&1 \
44 // RUN:   | FileCheck -check-prefix=CHK-FOPENMP-EQ-TARGET %s
45
46 // CHK-FOPENMP-EQ-TARGET: clang{{.*}} "-target-cpu" "pwr7" {{.*}}"-fopenmp-is-device"
47
48 /// ###########################################################################
49
50 /// Check -Xopenmp-target -mcpu=pwr7 is passed when compiling for the device.
51 // RUN:   %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu -Xopenmp-target -mcpu=pwr7 %s 2>&1 \
52 // RUN:   | FileCheck -check-prefix=CHK-FOPENMP-TARGET %s
53
54 // CHK-FOPENMP-TARGET: clang{{.*}} "-target-cpu" "pwr7" {{.*}}"-fopenmp-is-device"
55
56 /// ##########################################################################
57
58 /// Check -mcpu=pwr7 is passed to the same triple.
59 // RUN:    %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu -target powerpc64le-ibm-linux-gnu -mcpu=pwr7 %s 2>&1 \
60 // RUN:    | FileCheck -check-prefix=CHK-FOPENMP-MCPU-TO-SAME-TRIPLE %s
61
62 // CHK-FOPENMP-MCPU-TO-SAME-TRIPLE: clang{{.*}} "-target-cpu" "pwr7" {{.*}}"-fopenmp-is-device"
63
64 /// ##########################################################################
65
66 /// Check -march=pwr7 is NOT passed to nvptx64-nvidia-cuda.
67 // RUN:    %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=nvptx64-nvidia-cuda -target powerpc64le-ibm-linux-gnu -march=pwr7 %s 2>&1 \
68 // RUN:    | FileCheck -check-prefix=CHK-FOPENMP-MARCH-TO-GPU %s
69
70 // CHK-FOPENMP-MARCH-TO-GPU-NOT: clang{{.*}} "-target-cpu" "pwr7" {{.*}}"-fopenmp-is-device"
71
72 /// ###########################################################################
73
74 /// Check -march=pwr7 is NOT passed to x86_64-unknown-linux-gnu.
75 // RUN:    %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=x86_64-unknown-linux-gnu -target powerpc64le-ibm-linux-gnu -march=pwr7 %s 2>&1 \
76 // RUN:    | FileCheck -check-prefix=CHK-FOPENMP-MARCH-TO-X86 %s
77
78 // CHK-FOPENMP-MARCH-TO-X86-NOT: clang{{.*}} "-target-cpu" "pwr7" {{.*}}"-fopenmp-is-device"
79
80 /// ###########################################################################
81
82 /// Check -Xopenmp-target triggers error when multiple triples are used.
83 // RUN:   %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu,powerpc64le-unknown-linux-gnu -Xopenmp-target -mcpu=pwr8 %s 2>&1 \
84 // RUN:   | FileCheck -check-prefix=CHK-FOPENMP-TARGET-AMBIGUOUS-ERROR %s
85
86 // CHK-FOPENMP-TARGET-AMBIGUOUS-ERROR: clang{{.*}} error: cannot deduce implicit triple value for -Xopenmp-target, specify triple using -Xopenmp-target=<triple>
87
88 /// ###########################################################################
89
90 /// Check -Xopenmp-target triggers error when an option requiring arguments is passed to it.
91 // RUN:   %clang -### -no-canonical-prefixes -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu -Xopenmp-target -Xopenmp-target -mcpu=pwr8 %s 2>&1 \
92 // RUN:   | FileCheck -check-prefix=CHK-FOPENMP-TARGET-NESTED-ERROR %s
93
94 // CHK-FOPENMP-TARGET-NESTED-ERROR: clang{{.*}} error: invalid -Xopenmp-target argument: '-Xopenmp-target -Xopenmp-target', options requiring arguments are unsupported
95
96 /// ###########################################################################
97
98 /// Check the phases graph when using a single target, different from the host.
99 /// We should have an offload action joining the host compile and device
100 /// preprocessor and another one joining the device linking outputs to the host
101 /// action.
102 // RUN:   %clang -ccc-print-phases -fopenmp=libomp -target powerpc64le-ibm-linux-gnu -fopenmp-targets=x86_64-pc-linux-gnu %s 2>&1 \
103 // RUN:   | FileCheck -check-prefix=CHK-PHASES %s
104 // CHK-PHASES: 0: input, "[[INPUT:.+\.c]]", c, (host-openmp)
105 // CHK-PHASES: 1: preprocessor, {0}, cpp-output, (host-openmp)
106 // CHK-PHASES: 2: compiler, {1}, ir, (host-openmp)
107 // CHK-PHASES: 3: backend, {2}, assembler, (host-openmp)
108 // CHK-PHASES: 4: assembler, {3}, object, (host-openmp)
109 // CHK-PHASES: 5: linker, {4}, image, (host-openmp)
110 // CHK-PHASES: 6: input, "[[INPUT]]", c, (device-openmp)
111 // CHK-PHASES: 7: preprocessor, {6}, cpp-output, (device-openmp)
112 // CHK-PHASES: 8: compiler, {7}, ir, (device-openmp)
113 // CHK-PHASES: 9: offload, "host-openmp (powerpc64le-ibm-linux-gnu)" {2}, "device-openmp (x86_64-pc-linux-gnu)" {8}, ir
114 // CHK-PHASES: 10: backend, {9}, assembler, (device-openmp)
115 // CHK-PHASES: 11: assembler, {10}, object, (device-openmp)
116 // CHK-PHASES: 12: linker, {11}, image, (device-openmp)
117 // CHK-PHASES: 13: offload, "host-openmp (powerpc64le-ibm-linux-gnu)" {5}, "device-openmp (x86_64-pc-linux-gnu)" {12}, image
118
119 /// ###########################################################################
120
121 /// Check the phases when using multiple targets. Here we also add a library to
122 /// make sure it is treated as input by the device.
123 // RUN:   %clang -ccc-print-phases -lsomelib -fopenmp=libomp -target powerpc64-ibm-linux-gnu -fopenmp-targets=x86_64-pc-linux-gnu,powerpc64-ibm-linux-gnu %s 2>&1 \
124 // RUN:   | FileCheck -check-prefix=CHK-PHASES-LIB %s
125 // CHK-PHASES-LIB: 0: input, "somelib", object, (host-openmp)
126 // CHK-PHASES-LIB: 1: input, "[[INPUT:.+\.c]]", c, (host-openmp)
127 // CHK-PHASES-LIB: 2: preprocessor, {1}, cpp-output, (host-openmp)
128 // CHK-PHASES-LIB: 3: compiler, {2}, ir, (host-openmp)
129 // CHK-PHASES-LIB: 4: backend, {3}, assembler, (host-openmp)
130 // CHK-PHASES-LIB: 5: assembler, {4}, object, (host-openmp)
131 // CHK-PHASES-LIB: 6: linker, {0, 5}, image, (host-openmp)
132 // CHK-PHASES-LIB: 7: input, "somelib", object, (device-openmp)
133 // CHK-PHASES-LIB: 8: input, "[[INPUT]]", c, (device-openmp)
134 // CHK-PHASES-LIB: 9: preprocessor, {8}, cpp-output, (device-openmp)
135 // CHK-PHASES-LIB: 10: compiler, {9}, ir, (device-openmp)
136 // CHK-PHASES-LIB: 11: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {3}, "device-openmp (x86_64-pc-linux-gnu)" {10}, ir
137 // CHK-PHASES-LIB: 12: backend, {11}, assembler, (device-openmp)
138 // CHK-PHASES-LIB: 13: assembler, {12}, object, (device-openmp)
139 // CHK-PHASES-LIB: 14: linker, {7, 13}, image, (device-openmp)
140 // CHK-PHASES-LIB: 15: input, "somelib", object, (device-openmp)
141 // CHK-PHASES-LIB: 16: input, "[[INPUT]]", c, (device-openmp)
142 // CHK-PHASES-LIB: 17: preprocessor, {16}, cpp-output, (device-openmp)
143 // CHK-PHASES-LIB: 18: compiler, {17}, ir, (device-openmp)
144 // CHK-PHASES-LIB: 19: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {3}, "device-openmp (powerpc64-ibm-linux-gnu)" {18}, ir
145 // CHK-PHASES-LIB: 20: backend, {19}, assembler, (device-openmp)
146 // CHK-PHASES-LIB: 21: assembler, {20}, object, (device-openmp)
147 // CHK-PHASES-LIB: 22: linker, {15, 21}, image, (device-openmp)
148 // CHK-PHASES-LIB: 23: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {6}, "device-openmp (x86_64-pc-linux-gnu)" {14}, "device-openmp (powerpc64-ibm-linux-gnu)" {22}, image
149
150
151 /// ###########################################################################
152
153 /// Check the phases when using multiple targets and multiple source files
154 // RUN:   echo " " > %t.c
155 // RUN:   %clang -ccc-print-phases -lsomelib -fopenmp=libomp -target powerpc64-ibm-linux-gnu -fopenmp-targets=x86_64-pc-linux-gnu,powerpc64-ibm-linux-gnu %s %t.c 2>&1 \
156 // RUN:   | FileCheck -check-prefix=CHK-PHASES-FILES %s
157 // CHK-PHASES-FILES: 0: input, "somelib", object, (host-openmp)
158 // CHK-PHASES-FILES: 1: input, "[[INPUT1:.+\.c]]", c, (host-openmp)
159 // CHK-PHASES-FILES: 2: preprocessor, {1}, cpp-output, (host-openmp)
160 // CHK-PHASES-FILES: 3: compiler, {2}, ir, (host-openmp)
161 // CHK-PHASES-FILES: 4: backend, {3}, assembler, (host-openmp)
162 // CHK-PHASES-FILES: 5: assembler, {4}, object, (host-openmp)
163 // CHK-PHASES-FILES: 6: input, "[[INPUT2:.+\.c]]", c, (host-openmp)
164 // CHK-PHASES-FILES: 7: preprocessor, {6}, cpp-output, (host-openmp)
165 // CHK-PHASES-FILES: 8: compiler, {7}, ir, (host-openmp)
166 // CHK-PHASES-FILES: 9: backend, {8}, assembler, (host-openmp)
167 // CHK-PHASES-FILES: 10: assembler, {9}, object, (host-openmp)
168 // CHK-PHASES-FILES: 11: linker, {0, 5, 10}, image, (host-openmp)
169 // CHK-PHASES-FILES: 12: input, "somelib", object, (device-openmp)
170 // CHK-PHASES-FILES: 13: input, "[[INPUT1]]", c, (device-openmp)
171 // CHK-PHASES-FILES: 14: preprocessor, {13}, cpp-output, (device-openmp)
172 // CHK-PHASES-FILES: 15: compiler, {14}, ir, (device-openmp)
173 // CHK-PHASES-FILES: 16: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {3}, "device-openmp (x86_64-pc-linux-gnu)" {15}, ir
174 // CHK-PHASES-FILES: 17: backend, {16}, assembler, (device-openmp)
175 // CHK-PHASES-FILES: 18: assembler, {17}, object, (device-openmp)
176 // CHK-PHASES-FILES: 19: input, "[[INPUT2]]", c, (device-openmp)
177 // CHK-PHASES-FILES: 20: preprocessor, {19}, cpp-output, (device-openmp)
178 // CHK-PHASES-FILES: 21: compiler, {20}, ir, (device-openmp)
179 // CHK-PHASES-FILES: 22: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {8}, "device-openmp (x86_64-pc-linux-gnu)" {21}, ir
180 // CHK-PHASES-FILES: 23: backend, {22}, assembler, (device-openmp)
181 // CHK-PHASES-FILES: 24: assembler, {23}, object, (device-openmp)
182 // CHK-PHASES-FILES: 25: linker, {12, 18, 24}, image, (device-openmp)
183 // CHK-PHASES-FILES: 26: input, "somelib", object, (device-openmp)
184 // CHK-PHASES-FILES: 27: input, "[[INPUT1]]", c, (device-openmp)
185 // CHK-PHASES-FILES: 28: preprocessor, {27}, cpp-output, (device-openmp)
186 // CHK-PHASES-FILES: 29: compiler, {28}, ir, (device-openmp)
187 // CHK-PHASES-FILES: 30: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {3}, "device-openmp (powerpc64-ibm-linux-gnu)" {29}, ir
188 // CHK-PHASES-FILES: 31: backend, {30}, assembler, (device-openmp)
189 // CHK-PHASES-FILES: 32: assembler, {31}, object, (device-openmp)
190 // CHK-PHASES-FILES: 33: input, "[[INPUT2]]", c, (device-openmp)
191 // CHK-PHASES-FILES: 34: preprocessor, {33}, cpp-output, (device-openmp)
192 // CHK-PHASES-FILES: 35: compiler, {34}, ir, (device-openmp)
193 // CHK-PHASES-FILES: 36: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {8}, "device-openmp (powerpc64-ibm-linux-gnu)" {35}, ir
194 // CHK-PHASES-FILES: 37: backend, {36}, assembler, (device-openmp)
195 // CHK-PHASES-FILES: 38: assembler, {37}, object, (device-openmp)
196 // CHK-PHASES-FILES: 39: linker, {26, 32, 38}, image, (device-openmp)
197 // CHK-PHASES-FILES: 40: offload, "host-openmp (powerpc64-ibm-linux-gnu)" {11}, "device-openmp (x86_64-pc-linux-gnu)" {25}, "device-openmp (powerpc64-ibm-linux-gnu)" {39}, image
198
199 /// ###########################################################################
200
201 /// Check the phases graph when using a single GPU target, and check the OpenMP
202 /// and CUDA phases are articulated correctly.
203 // RUN:   %clang -ccc-print-phases -fopenmp=libomp -target powerpc64le-ibm-linux-gnu -fopenmp-targets=nvptx64-nvidia-cuda -x cuda %s 2>&1 \
204 // RUN:   | FileCheck -check-prefix=CHK-PHASES-WITH-CUDA %s
205 // CHK-PHASES-WITH-CUDA: 0: input, "[[INPUT:.+\.c]]", cuda, (host-cuda-openmp)
206 // CHK-PHASES-WITH-CUDA: 1: preprocessor, {0}, cuda-cpp-output, (host-cuda-openmp)
207 // CHK-PHASES-WITH-CUDA: 2: compiler, {1}, ir, (host-cuda-openmp)
208 // CHK-PHASES-WITH-CUDA: 3: input, "[[INPUT]]", cuda, (device-cuda, sm_20)
209 // CHK-PHASES-WITH-CUDA: 4: preprocessor, {3}, cuda-cpp-output, (device-cuda, sm_20)
210 // CHK-PHASES-WITH-CUDA: 5: compiler, {4}, ir, (device-cuda, sm_20)
211 // CHK-PHASES-WITH-CUDA: 6: backend, {5}, assembler, (device-cuda, sm_20)
212 // CHK-PHASES-WITH-CUDA: 7: assembler, {6}, object, (device-cuda, sm_20)
213 // CHK-PHASES-WITH-CUDA: 8: offload, "device-cuda (nvptx64-nvidia-cuda:sm_20)" {7}, object
214 // CHK-PHASES-WITH-CUDA: 9: offload, "device-cuda (nvptx64-nvidia-cuda:sm_20)" {6}, assembler
215 // CHK-PHASES-WITH-CUDA: 10: linker, {8, 9}, cuda-fatbin, (device-cuda)
216 // CHK-PHASES-WITH-CUDA: 11: offload, "host-cuda-openmp (powerpc64le-ibm-linux-gnu)" {2}, "device-cuda (nvptx64-nvidia-cuda)" {10}, ir
217 // CHK-PHASES-WITH-CUDA: 12: backend, {11}, assembler, (host-cuda-openmp)
218 // CHK-PHASES-WITH-CUDA: 13: assembler, {12}, object, (host-cuda-openmp)
219 // CHK-PHASES-WITH-CUDA: 14: linker, {13}, image, (host-cuda-openmp)
220 // CHK-PHASES-WITH-CUDA: 15: input, "[[INPUT]]", cuda, (device-openmp)
221 // CHK-PHASES-WITH-CUDA: 16: preprocessor, {15}, cuda-cpp-output, (device-openmp)
222 // CHK-PHASES-WITH-CUDA: 17: compiler, {16}, ir, (device-openmp)
223 // CHK-PHASES-WITH-CUDA: 18: offload, "host-cuda-openmp (powerpc64le-ibm-linux-gnu)" {2}, "device-openmp (nvptx64-nvidia-cuda)" {17}, ir
224 // CHK-PHASES-WITH-CUDA: 19: backend, {18}, assembler, (device-openmp)
225 // CHK-PHASES-WITH-CUDA: 20: assembler, {19}, object, (device-openmp)
226 // CHK-PHASES-WITH-CUDA: 21: linker, {20}, image, (device-openmp)
227 // CHK-PHASES-WITH-CUDA: 22: offload, "host-cuda-openmp (powerpc64le-ibm-linux-gnu)" {14}, "device-openmp (nvptx64-nvidia-cuda)" {21}, image
228
229 /// ###########################################################################
230
231 /// Check of the commands passed to each tool when using valid OpenMP targets.
232 /// Here we also check that offloading does not break the use of integrated
233 /// assembler. It does however preclude the merge of the host compile and
234 /// backend phases. There are also two offloading specific options:
235 /// -fopenmp-is-device: will tell the frontend that it will generate code for a
236 /// target.
237 /// -fopenmp-host-ir-file-path: specifies the host IR file that can be loaded by
238 /// the target code generation to gather information about which declaration
239 /// really need to be emitted.
240 /// We use -fopenmp-dump-offload-linker-script to dump the linker script and
241 /// check its contents.
242 ///
243 // RUN:   %clang -### -fopenmp=libomp -o %t.out -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -fopenmp-dump-offload-linker-script -no-canonical-prefixes 2>&1 \
244 // RUN:   | FileCheck -check-prefix=CHK-COMMANDS -check-prefix=CHK-LKS -check-prefix=CHK-LKS-REG %s
245 // RUN:   %clang -### -fopenmp=libomp -o %t.out -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -save-temps -fopenmp-dump-offload-linker-script -no-canonical-prefixes 2>&1 \
246 // RUN:   | FileCheck -check-prefix=CHK-COMMANDS-ST -check-prefix=CHK-LKS -check-prefix=CHK-LKS-ST %s
247
248 // Make sure we are not dumping the script unless the user requested it.
249 // RUN:   %clang -### -fopenmp=libomp -o %t.out -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -no-canonical-prefixes 2>&1 \
250 // RUN:   | FileCheck -check-prefix=CHK-LKS-NODUMP %s
251 // RUN:   %clang -### -fopenmp=libomp -o %t.out -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -save-temps -no-canonical-prefixes 2>&1 \
252 // RUN:   | FileCheck -check-prefix=CHK-LKS-NODUMP %s
253
254 //
255 // Check the linker script contains what we expect.
256 //
257 // CHK-LKS: /*
258 // CHK-LKS:                   OpenMP Offload Linker Script
259 // CHK-LKS:             *** Automatically generated by Clang ***
260 // CHK-LKS-NODUMP-NOT:  OpenMP Offload Linker Script.
261 // CHK-LKS: */
262 // CHK-LKS: TARGET(binary)
263 // CHK-LKS-REG: INPUT([[T1BIN:.+\.out]])
264 // CHK-LKS-REG: INPUT([[T2BIN:.+\.out]])
265 // CHK-LKS-ST: INPUT([[T1BIN:.+\.out-openmp-powerpc64le-ibm-linux-gnu]])
266 // CHK-LKS-ST: INPUT([[T2BIN:.+\.out-openmp-x86_64-pc-linux-gnu]])
267 // CHK-LKS: SECTIONS
268 // CHK-LKS: {
269 // CHK-LKS:   .omp_offloading.powerpc64le-ibm-linux-gnu :
270 // CHK-LKS:   ALIGN(0x10)
271 // CHK-LKS:   {
272 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.img_start.powerpc64le-ibm-linux-gnu = .);
273 // CHK-LKS:     [[T1BIN]]
274 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.img_end.powerpc64le-ibm-linux-gnu = .);
275 // CHK-LKS:   }
276 // CHK-LKS:   .omp_offloading.x86_64-pc-linux-gnu :
277 // CHK-LKS:   ALIGN(0x10)
278 // CHK-LKS:   {
279 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.img_start.x86_64-pc-linux-gnu = .);
280 // CHK-LKS:     [[T2BIN]]
281 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.img_end.x86_64-pc-linux-gnu = .);
282 // CHK-LKS:   }
283 // CHK-LKS:   .omp_offloading.entries :
284 // CHK-LKS:   ALIGN(0x10)
285 // CHK-LKS:   SUBALIGN(0x01)
286 // CHK-LKS:   {
287 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.entries_begin = .);
288 // CHK-LKS:     *(.omp_offloading.entries)
289 // CHK-LKS:     PROVIDE_HIDDEN(.omp_offloading.entries_end = .);
290 // CHK-LKS:   }
291 // CHK-LKS: }
292 // CHK-LKS: INSERT BEFORE .data
293
294 //
295 // Generate host BC file.
296 //
297 // CHK-COMMANDS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-o" "
298 // CHK-COMMANDS-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "c" "
299 // CHK-COMMANDS-SAME: [[INPUT:[^\\/]+\.c]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
300 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-E" {{.*}}"-fopenmp" {{.*}}"-o" "
301 // CHK-COMMANDS-ST-SAME: [[HOSTPP:[^\\/]+\.i]]" "-x" "c" "
302 // CHK-COMMANDS-ST-SAME: [[INPUT:[^\\/]+\.c]]"
303 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
304 // CHK-COMMANDS-ST-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
305
306 //
307 // Compile for the powerpc device.
308 //
309 // CHK-COMMANDS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-pic-level" "2" {{.*}}"-fopenmp" {{.*}}"-o" "
310 // CHK-COMMANDS-SAME: [[T1OBJ:[^\\/]+\.o]]" "-x" "c" "{{.*}}[[INPUT]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
311 // CHK-COMMANDS: ld{{(\.exe)?}}" {{.*}}"-o" "
312 // CHK-COMMANDS-SAME: [[T1BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T1OBJ]]"
313 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-E" {{.*}}"-fopenmp" {{.*}}"-o" "
314 // CHK-COMMANDS-ST-SAME: [[T1PP:[^\\/]+\.i]]" "-x" "c" "{{.*}}[[INPUT]]"
315 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-pic-level" "2" {{.*}}"-fopenmp" {{.*}}"-o" "
316 // CHK-COMMANDS-ST-SAME: [[T1BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
317 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
318 // CHK-COMMANDS-ST-SAME: [[T1ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T1BC]]"
319 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-ibm-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
320 // CHK-COMMANDS-ST-SAME: [[T1OBJ:[^\\/]+\.o]]" "{{.*}}[[T1ASM]]"
321 // CHK-COMMANDS-ST: ld{{(\.exe)?}}" {{.*}}"-shared" {{.*}}"-o" "
322 // CHK-COMMANDS-ST-SAME: [[T1BIN:[^\\/]+\.out-openmp-powerpc64le-ibm-linux-gnu]]" {{.*}}"{{.*}}[[T1OBJ]]"
323 //
324 // Compile for the x86 device.
325 //
326 // CHK-COMMANDS: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-pic-level" "2" {{.*}}"-fopenmp"  {{.*}}"-o" "
327 // CHK-COMMANDS-SAME: [[T2OBJ:[^\\/]+\.o]]" "-x" "c" "{{.*}}[[INPUT]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
328 // CHK-COMMANDS: ld{{(\.exe)?}}" {{.*}}"-o" "
329 // CHK-COMMANDS-SAME: [[T2BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T2OBJ]]"
330 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-E" {{.*}}"-fopenmp" {{.*}}"-o" "
331 // CHK-COMMANDS-ST-SAME: [[T2PP:[^\\/]+\.i]]" "-x" "c" "{{.*}}[[INPUT]]"
332 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-pic-level" "2" {{.*}}"-fopenmp" {{.*}}"-o" "
333 // CHK-COMMANDS-ST-SAME: [[T2BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
334 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
335 // CHK-COMMANDS-ST-SAME: [[T2ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T2BC]]"
336 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1as" "-triple" "x86_64-pc-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
337 // CHK-COMMANDS-ST-SAME: [[T2OBJ:[^\\/]+\.o]]" "{{.*}}[[T2ASM]]"
338 // CHK-COMMANDS-ST: ld{{(\.exe)?}}" {{.*}}"-shared" {{.*}}"-o" "
339 // CHK-COMMANDS-ST-SAME: [[T2BIN:[^\\/]+\.out-openmp-x86_64-pc-linux-gnu]]" {{.*}}"{{.*}}[[T2OBJ]]"
340
341 //
342 // Generate host object from the BC file and link using the linker script.
343 //
344 // CHK-COMMANDS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
345 // CHK-COMMANDS-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
346 // CHK-COMMANDS: ld{{(\.exe)?}}" {{.*}}"-o" "
347 // CHK-COMMANDS-SAME: [[HOSTBIN:[^\\/]+\.out]]"  {{.*}}"-lomptarget" {{.*}}"-T" "
348 // CHK-COMMANDS-SAME: [[HOSTLK:[^\\/]+\.lk]]"
349 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
350 // CHK-COMMANDS-ST-SAME: [[HOSTASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
351 // CHK-COMMANDS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-unknown-linux" "-filetype" "obj" {{.*}}"-o" "
352 // CHK-COMMANDS-ST-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "{{.*}}[[HOSTASM]]"
353 // CHK-COMMANDS-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
354 // CHK-COMMANDS-ST-SAME: [[HOSTBIN:[^\\/]+\.out]]"  {{.*}}"-lomptarget" {{.*}}"-T" "
355 // CHK-COMMANDS-ST-SAME: [[HOSTLK:[^\\/]+\.lk]]"
356
357
358 /// ###########################################################################
359
360 /// Check separate compilation with offloading - bundling actions
361 // RUN:   %clang -### -ccc-print-phases -fopenmp=libomp -c -o %t.o %S/Input/in.so -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -no-canonical-prefixes 2>&1 \
362 // RUN:   | FileCheck -check-prefix=CHK-BUACTIONS %s
363
364 // CHK-BUACTIONS: 0: input, "[[INPUT:.+\.c]]", c, (host-openmp)
365 // CHK-BUACTIONS: 1: preprocessor, {0}, cpp-output, (host-openmp)
366 // CHK-BUACTIONS: 2: compiler, {1}, ir, (host-openmp)
367 // CHK-BUACTIONS: 3: input, "[[INPUT]]", c, (device-openmp)
368 // CHK-BUACTIONS: 4: preprocessor, {3}, cpp-output, (device-openmp)
369 // CHK-BUACTIONS: 5: compiler, {4}, ir, (device-openmp)
370 // CHK-BUACTIONS: 6: offload, "host-openmp (powerpc64le-unknown-linux)" {2}, "device-openmp (powerpc64le-ibm-linux-gnu)" {5}, ir
371 // CHK-BUACTIONS: 7: backend, {6}, assembler, (device-openmp)
372 // CHK-BUACTIONS: 8: assembler, {7}, object, (device-openmp)
373 // CHK-BUACTIONS: 9: offload, "device-openmp (powerpc64le-ibm-linux-gnu)" {8}, object
374 // CHK-BUACTIONS: 10: input, "[[INPUT]]", c, (device-openmp)
375 // CHK-BUACTIONS: 11: preprocessor, {10}, cpp-output, (device-openmp)
376 // CHK-BUACTIONS: 12: compiler, {11}, ir, (device-openmp)
377 // CHK-BUACTIONS: 13: offload, "host-openmp (powerpc64le-unknown-linux)" {2}, "device-openmp (x86_64-pc-linux-gnu)" {12}, ir
378 // CHK-BUACTIONS: 14: backend, {13}, assembler, (device-openmp)
379 // CHK-BUACTIONS: 15: assembler, {14}, object, (device-openmp)
380 // CHK-BUACTIONS: 16: offload, "device-openmp (x86_64-pc-linux-gnu)" {15}, object
381 // CHK-BUACTIONS: 17: backend, {2}, assembler, (host-openmp)
382 // CHK-BUACTIONS: 18: assembler, {17}, object, (host-openmp)
383 // CHK-BUACTIONS: 19: clang-offload-bundler, {9, 16, 18}, object, (host-openmp)
384
385 /// ###########################################################################
386
387 /// Check separate compilation with offloading - unbundling actions
388 // RUN:   touch %t.i
389 // RUN:   %clang -### -ccc-print-phases -fopenmp=libomp -o %t.out -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -no-canonical-prefixes 2>&1 \
390 // RUN:   | FileCheck -check-prefix=CHK-UBACTIONS %s
391
392 // CHK-UBACTIONS: 0: input, "somelib", object, (host-openmp)
393 // CHK-UBACTIONS: 1: input, "[[INPUT:.+\.i]]", cpp-output, (host-openmp)
394 // CHK-UBACTIONS: 2: clang-offload-unbundler, {1}, cpp-output, (host-openmp)
395 // CHK-UBACTIONS: 3: compiler, {2}, ir, (host-openmp)
396 // CHK-UBACTIONS: 4: backend, {3}, assembler, (host-openmp)
397 // CHK-UBACTIONS: 5: assembler, {4}, object, (host-openmp)
398 // CHK-UBACTIONS: 6: linker, {0, 5}, image, (host-openmp)
399 // CHK-UBACTIONS: 7: input, "somelib", object, (device-openmp)
400 // CHK-UBACTIONS: 8: compiler, {2}, ir, (device-openmp)
401 // CHK-UBACTIONS: 9: offload, "host-openmp (powerpc64le-unknown-linux)" {3}, "device-openmp (powerpc64le-ibm-linux-gnu)" {8}, ir
402 // CHK-UBACTIONS: 10: backend, {9}, assembler, (device-openmp)
403 // CHK-UBACTIONS: 11: assembler, {10}, object, (device-openmp)
404 // CHK-UBACTIONS: 12: linker, {7, 11}, image, (device-openmp)
405 // CHK-UBACTIONS: 13: input, "somelib", object, (device-openmp)
406 // CHK-UBACTIONS: 14: compiler, {2}, ir, (device-openmp)
407 // CHK-UBACTIONS: 15: offload, "host-openmp (powerpc64le-unknown-linux)" {3}, "device-openmp (x86_64-pc-linux-gnu)" {14}, ir
408 // CHK-UBACTIONS: 16: backend, {15}, assembler, (device-openmp)
409 // CHK-UBACTIONS: 17: assembler, {16}, object, (device-openmp)
410 // CHK-UBACTIONS: 18: linker, {13, 17}, image, (device-openmp)
411 // CHK-UBACTIONS: 19: offload, "host-openmp (powerpc64le-unknown-linux)" {6}, "device-openmp (powerpc64le-ibm-linux-gnu)" {12}, "device-openmp (x86_64-pc-linux-gnu)" {18}, image
412
413 /// ###########################################################################
414
415 /// Check separate compilation with offloading - unbundling/bundling actions
416 // RUN:   touch %t.i
417 // RUN:   %clang -### -ccc-print-phases -fopenmp=libomp -c -o %t.o -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -no-canonical-prefixes 2>&1 \
418 // RUN:   | FileCheck -check-prefix=CHK-UBUACTIONS %s
419
420 // CHK-UBUACTIONS: 0: input, "[[INPUT:.+\.i]]", cpp-output, (host-openmp)
421 // CHK-UBUACTIONS: 1: clang-offload-unbundler, {0}, cpp-output, (host-openmp)
422 // CHK-UBUACTIONS: 2: compiler, {1}, ir, (host-openmp)
423 // CHK-UBUACTIONS: 3: compiler, {1}, ir, (device-openmp)
424 // CHK-UBUACTIONS: 4: offload, "host-openmp (powerpc64le-unknown-linux)" {2}, "device-openmp (powerpc64le-ibm-linux-gnu)" {3}, ir
425 // CHK-UBUACTIONS: 5: backend, {4}, assembler, (device-openmp)
426 // CHK-UBUACTIONS: 6: assembler, {5}, object, (device-openmp)
427 // CHK-UBUACTIONS: 7: offload, "device-openmp (powerpc64le-ibm-linux-gnu)" {6}, object
428 // CHK-UBUACTIONS: 8: compiler, {1}, ir, (device-openmp)
429 // CHK-UBUACTIONS: 9: offload, "host-openmp (powerpc64le-unknown-linux)" {2}, "device-openmp (x86_64-pc-linux-gnu)" {8}, ir
430 // CHK-UBUACTIONS: 10: backend, {9}, assembler, (device-openmp)
431 // CHK-UBUACTIONS: 11: assembler, {10}, object, (device-openmp)
432 // CHK-UBUACTIONS: 12: offload, "device-openmp (x86_64-pc-linux-gnu)" {11}, object
433 // CHK-UBUACTIONS: 13: backend, {2}, assembler, (host-openmp)
434 // CHK-UBUACTIONS: 14: assembler, {13}, object, (host-openmp)
435 // CHK-UBUACTIONS: 15: clang-offload-bundler, {7, 12, 14}, object, (host-openmp)
436
437 /// ###########################################################################
438
439 /// Check separate compilation with offloading - bundling jobs construct
440 // RUN:   %clang -### -fopenmp=libomp -c -o %t.o -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -no-canonical-prefixes 2>&1 \
441 // RUN:   | FileCheck -check-prefix=CHK-BUJOBS %s
442 // RUN:   %clang -### -fopenmp=libomp -c -o %t.o -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %s -save-temps -no-canonical-prefixes 2>&1 \
443 // RUN:   | FileCheck -check-prefix=CHK-BUJOBS-ST %s
444
445 // Create host BC.
446 // CHK-BUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
447 // CHK-BUJOBS-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "c" "
448 // CHK-BUJOBS-SAME: [[INPUT:[^\\/]+\.c]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
449
450 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-E"  {{.*}}"-fopenmp" {{.*}}"-o" "
451 // CHK-BUJOBS-ST-SAME: [[HOSTPP:[^\\/]+\.i]]" "-x" "c" "
452 // CHK-BUJOBS-ST-SAME: [[INPUT:[^\\/]+\.c]]"
453 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
454 // CHK-BUJOBS-ST-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
455
456 // Create target 1 object.
457 // CHK-BUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
458 // CHK-BUJOBS-SAME: [[T1OBJ:[^\\/]+\.o]]" "-x" "c" "{{.*}}[[INPUT]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
459 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-E" {{.*}}"-fopenmp" {{.*}}"-o" "
460 // CHK-BUJOBS-ST-SAME: [[T1PP:[^\\/]+\.i]]" "-x" "c" "{{.*}}[[INPUT]]"
461 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
462 // CHK-BUJOBS-ST-SAME: [[T1BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
463 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
464 // CHK-BUJOBS-ST-SAME: [[T1ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T1BC]]"
465 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-ibm-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
466 // CHK-BUJOBS-ST-SAME: [[T1OBJ:[^\\/]+\.o]]" "{{.*}}[[T1ASM]]"
467
468 // Create target 2 object.
469 // CHK-BUJOBS: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
470 // CHK-BUJOBS-SAME: [[T2OBJ:[^\\/]+\.o]]" "-x" "c" "{{.*}}[[INPUT]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
471 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-E" {{.*}}"-fopenmp" {{.*}}"-o" "
472 // CHK-BUJOBS-ST-SAME: [[T2PP:[^\\/]+\.i]]" "-x" "c" "{{.*}}[[INPUT]]"
473 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
474 // CHK-BUJOBS-ST-SAME: [[T2BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
475 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
476 // CHK-BUJOBS-ST-SAME: [[T2ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T2BC]]"
477 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "x86_64-pc-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
478 // CHK-BUJOBS-ST-SAME: [[T2OBJ:[^\\/]+\.o]]" "{{.*}}[[T2ASM]]"
479
480 // Create host object and bundle.
481 // CHK-BUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
482 // CHK-BUJOBS-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
483 // CHK-BUJOBS: clang-offload-bundler{{.*}}" "-type=o" "-targets=openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu,host-powerpc64le-unknown-linux" "-outputs=
484 // CHK-BUJOBS-SAME: [[RES:[^\\/]+\.o]]" "-inputs={{.*}}[[T1OBJ]],{{.*}}[[T2OBJ]],{{.*}}[[HOSTOBJ]]"
485 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
486 // CHK-BUJOBS-ST-SAME: [[HOSTASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
487 // CHK-BUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-unknown-linux" "-filetype" "obj" {{.*}}"-o" "
488 // CHK-BUJOBS-ST-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "{{.*}}[[HOSTASM]]"
489 // CHK-BUJOBS-ST: clang-offload-bundler{{.*}}" "-type=o" "-targets=openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu,host-powerpc64le-unknown-linux" "-outputs=
490 // CHK-BUJOBS-ST-SAME: [[RES:[^\\/]+\.o]]" "-inputs={{.*}}[[T1OBJ]],{{.*}}[[T2OBJ]],{{.*}}[[HOSTOBJ]]"
491
492 /// ###########################################################################
493
494 /// Check separate compilation with offloading - unbundling jobs construct
495 // RUN:   touch %t.i
496 // RUN:   %clang -###  -fopenmp=libomp -o %t.out -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -no-canonical-prefixes 2>&1 \
497 // RUN:   | FileCheck -check-prefix=CHK-UBJOBS %s
498 // RUN:   %clang -### -fopenmp=libomp -o %t.out -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -save-temps -no-canonical-prefixes 2>&1 \
499 // RUN:   | FileCheck -check-prefix=CHK-UBJOBS-ST %s
500 // RUN:   touch %t.o
501 // RUN:   %clang -###  -fopenmp=libomp -o %t.out -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.o -no-canonical-prefixes 2>&1 \
502 // RUN:   | FileCheck -check-prefix=CHK-UBJOBS2 %s
503 // RUN:   %clang -### -fopenmp=libomp -o %t.out -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.o %S/Inputs/in.so -save-temps -no-canonical-prefixes 2>&1 \
504 // RUN:   | FileCheck -check-prefix=CHK-UBJOBS2-ST %s
505
506 // Unbundle and create host BC.
507 // CHK-UBJOBS: clang-offload-bundler{{.*}}" "-type=i" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
508 // CHK-UBJOBS-SAME: [[INPUT:[^\\/]+\.i]]" "-outputs=
509 // CHK-UBJOBS-SAME: [[HOSTPP:[^\\/]+\.i]],
510 // CHK-UBJOBS-SAME: [[T1PP:[^\\/]+\.i]],
511 // CHK-UBJOBS-SAME: [[T2PP:[^\\/]+\.i]]" "-unbundle"
512 // CHK-UBJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
513 // CHK-UBJOBS-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
514 // CHK-UBJOBS-ST: clang-offload-bundler{{.*}}" "-type=i" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
515 // CHK-UBJOBS-ST-SAME: [[INPUT:[^\\/]+\.i]]" "-outputs=
516 // CHK-UBJOBS-ST-SAME: [[HOSTPP:[^\\/,]+\.i]],
517 // CHK-UBJOBS-ST-SAME: [[T1PP:[^\\/,]+\.i]],
518 // CHK-UBJOBS-ST-SAME: [[T2PP:[^\\/,]+\.i]]" "-unbundle"
519 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
520 // CHK-UBJOBS-ST-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
521
522 // Create target 1 object.
523 // CHK-UBJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
524 // CHK-UBJOBS-SAME: [[T1OBJ:[^\\/]+\.o]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
525 // CHK-UBJOBS: ld{{(\.exe)?}}" {{.*}}"-o" "
526 // CHK-UBJOBS-SAME: [[T1BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T1OBJ]]"
527 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
528 // CHK-UBJOBS-ST-SAME: [[T1BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
529 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
530 // CHK-UBJOBS-ST-SAME: [[T1ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T1BC]]"
531 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-ibm-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
532 // CHK-UBJOBS-ST-SAME: [[T1OBJ:[^\\/]+\.o]]" "{{.*}}[[T1ASM]]"
533 // CHK-UBJOBS-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
534 // CHK-UBJOBS-ST-SAME: [[T1BIN:[^\\/]+\.out-openmp-powerpc64le-ibm-linux-gnu]]" {{.*}}"{{.*}}[[T1OBJ]]"
535
536 // Create target 2 object.
537 // CHK-UBJOBS: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
538 // CHK-UBJOBS-SAME: [[T2OBJ:[^\\/]+\.o]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
539 // CHK-UBJOBS: ld{{(\.exe)?}}" {{.*}}"-o" "
540 // CHK-UBJOBS-SAME: [[T2BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T2OBJ]]"
541 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
542 // CHK-UBJOBS-ST-SAME: [[T2BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
543 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
544 // CHK-UBJOBS-ST-SAME: [[T2ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T2BC]]"
545 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "x86_64-pc-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
546 // CHK-UBJOBS-ST-SAME: [[T2OBJ:[^\\/]+\.o]]" "{{.*}}[[T2ASM]]"
547 // CHK-UBJOBS-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
548 // CHK-UBJOBS-ST-SAME: [[T2BIN:[^\\/]+\.out-openmp-x86_64-pc-linux-gnu]]" {{.*}}"{{.*}}[[T2OBJ]]"
549
550 // Create binary.
551 // CHK-UBJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
552 // CHK-UBJOBS-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
553 // CHK-UBJOBS: ld{{(\.exe)?}}" {{.*}}"-o" "
554 // CHK-UBJOBS-SAME: [[HOSTBIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[HOSTOBJ]]" {{.*}}"-T" "
555 // CHK-UBJOBS-SAME: [[LKS:[^\\/]+\.lk]]"
556 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
557 // CHK-UBJOBS-ST-SAME: [[HOSTASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
558 // CHK-UBJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-unknown-linux" "-filetype" "obj" {{.*}}"-o" "
559 // CHK-UBJOBS-ST-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "{{.*}}[[HOSTASM]]"
560 // CHK-UBJOBS-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
561 // CHK-UBJOBS-ST-SAME: [[HOSTBIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[HOSTOBJ]]" {{.*}}"-T" "
562 // CHK-UBJOBS-ST-SAME: [[LKS:[^\\/]+\.lk]]"
563
564 // Unbundle object file.
565 // CHK-UBJOBS2: clang-offload-bundler{{.*}}" "-type=o" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
566 // CHK-UBJOBS2-SAME: [[INPUT:[^\\/]+\.o]]" "-outputs=
567 // CHK-UBJOBS2-SAME: [[HOSTOBJ:[^\\/]+\.o]],
568 // CHK-UBJOBS2-SAME: [[T1OBJ:[^\\/]+\.o]],
569 // CHK-UBJOBS2-SAME: [[T2OBJ:[^\\/]+\.o]]" "-unbundle"
570 // CHK-UBJOBS2: ld{{(\.exe)?}}" {{.*}}"-o" "
571 // CHK-UBJOBS2-SAME: [[T1BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T1OBJ]]"
572 // CHK-UBJOBS2: ld{{(\.exe)?}}" {{.*}}"-o" "
573 // CHK-UBJOBS2-SAME: [[T2BIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[T2OBJ]]"
574 // CHK-UBJOBS2: ld{{(\.exe)?}}" {{.*}}"-o" "
575 // CHK-UBJOBS2-SAME: [[HOSTBIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[HOSTOBJ]]" {{.*}}"-T" "
576 // CHK-UBJOBS2-SAME: [[LKS:[^\\/]+\.lk]]"
577 // CHK-UBJOBS2-ST-NOT: clang-offload-bundler{{.*}}in.so
578 // CHK-UBJOBS2-ST: clang-offload-bundler{{.*}}" "-type=o" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
579 // CHK-UBJOBS2-ST-SAME: [[INPUT:[^\\/]+\.o]]" "-outputs=
580 // CHK-UBJOBS2-ST-SAME: [[HOSTOBJ:[^\\/,]+\.o]],
581 // CHK-UBJOBS2-ST-SAME: [[T1OBJ:[^\\/,]+\.o]],
582 // CHK-UBJOBS2-ST-SAME: [[T2OBJ:[^\\/,]+\.o]]" "-unbundle"
583 // CHK-UBJOBS2-ST-NOT: clang-offload-bundler{{.*}}in.so
584 // CHK-UBJOBS2-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
585 // CHK-UBJOBS2-ST-SAME: [[T1BIN:[^\\/]+\.out-openmp-powerpc64le-ibm-linux-gnu]]" {{.*}}"{{.*}}[[T1OBJ]]"
586 // CHK-UBJOBS2-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
587 // CHK-UBJOBS2-ST-SAME: [[T2BIN:[^\\/]+\.out-openmp-x86_64-pc-linux-gnu]]" {{.*}}"{{.*}}[[T2OBJ]]"
588 // CHK-UBJOBS2-ST: ld{{(\.exe)?}}" {{.*}}"-o" "
589 // CHK-UBJOBS2-ST-SAME: [[HOSTBIN:[^\\/]+\.out]]" {{.*}}"{{.*}}[[HOSTOBJ]]" {{.*}}"-T" "
590 // CHK-UBJOBS2-ST-SAME: [[LKS:[^\\/]+\.lk]]"
591
592 /// ###########################################################################
593
594 /// Check separate compilation with offloading - unbundling/bundling jobs
595 /// construct
596 // RUN:   touch %t.i
597 // RUN:   %clang -### -fopenmp=libomp -c %t.o -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -no-canonical-prefixes 2>&1 \
598 // RUN:   | FileCheck -check-prefix=CHK-UBUJOBS %s
599 // RUN:   %clang -### -fopenmp=libomp -c %t.o -lsomelib -target powerpc64le-linux -fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu %t.i -save-temps -no-canonical-prefixes 2>&1 \
600 // RUN:   | FileCheck -check-prefix=CHK-UBUJOBS-ST %s
601
602 // Unbundle and create host BC.
603 // CHK-UBUJOBS: clang-offload-bundler{{.*}}" "-type=i" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
604 // CHK-UBUJOBS-SAME: [[INPUT:[^\\/]+\.i]]" "-outputs=
605 // CHK-UBUJOBS-SAME: [[HOSTPP:[^\\/]+\.i]],
606 // CHK-UBUJOBS-SAME: [[T1PP:[^\\/]+\.i]],
607 // CHK-UBUJOBS-SAME: [[T2PP:[^\\/]+\.i]]" "-unbundle"
608 // CHK-UBUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
609 // CHK-UBUJOBS-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
610
611 // CHK-UBUJOBS-ST: clang-offload-bundler{{.*}}" "-type=i" "-targets=host-powerpc64le-unknown-linux,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu" "-inputs=
612 // CHK-UBUJOBS-ST-SAME: [[INPUT:[^\\/]+\.i]]" "-outputs=
613 // CHK-UBUJOBS-ST-SAME: [[HOSTPP:[^\\/,]+\.i]],
614 // CHK-UBUJOBS-ST-SAME: [[T1PP:[^\\/,]+\.i]],
615 // CHK-UBUJOBS-ST-SAME: [[T2PP:[^\\/,]+\.i]]" "-unbundle"
616 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc"  {{.*}}"-fopenmp" {{.*}}"-o" "
617 // CHK-UBUJOBS-ST-SAME: [[HOSTBC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[HOSTPP]]" "-fopenmp-targets=powerpc64le-ibm-linux-gnu,x86_64-pc-linux-gnu"
618
619 // Create target 1 object.
620 // CHK-UBUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
621 // CHK-UBUJOBS-SAME: [[T1OBJ:[^\\/]+\.o]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
622 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
623 // CHK-UBUJOBS-ST-SAME: [[T1BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T1PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
624 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-ibm-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
625 // CHK-UBUJOBS-ST-SAME: [[T1ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T1BC]]"
626 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-ibm-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
627 // CHK-UBUJOBS-ST-SAME: [[T1OBJ:[^\\/]+\.o]]" "{{.*}}[[T1ASM]]"
628
629 // Create target 2 object.
630 // CHK-UBUJOBS: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
631 // CHK-UBUJOBS-SAME: [[T2OBJ:[^\\/]+\.o]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
632 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-emit-llvm-bc" {{.*}}"-fopenmp" {{.*}}"-o" "
633 // CHK-UBUJOBS-ST-SAME: [[T2BC:[^\\/]+\.bc]]" "-x" "cpp-output" "{{.*}}[[T2PP]]" "-fopenmp-is-device" "-fopenmp-host-ir-file-path" "{{.*}}[[HOSTBC]]"
634 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-aux-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
635 // CHK-UBUJOBS-ST-SAME: [[T2ASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[T2BC]]"
636 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "x86_64-pc-linux-gnu" "-filetype" "obj" {{.*}}"-o" "
637 // CHK-UBUJOBS-ST-SAME: [[T2OBJ:[^\\/]+\.o]]" "{{.*}}[[T2ASM]]"
638
639 // Create binary.
640 // CHK-UBUJOBS: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-emit-obj" {{.*}}"-fopenmp" {{.*}}"-o" "
641 // CHK-UBUJOBS-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
642 // CHK-UBUJOBS: clang-offload-bundler{{.*}}" "-type=o" "-targets=openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu,host-powerpc64le-unknown-linux" "-outputs=
643 // CHK-UBUJOBS-SAME: [[RES:[^\\/]+\.o]]" "-inputs={{.*}}[[T1OBJ]],{{.*}}[[T2OBJ]],{{.*}}[[HOSTOBJ]]"
644 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1" "-triple" "powerpc64le-unknown-linux" "-S" {{.*}}"-fopenmp" {{.*}}"-o" "
645 // CHK-UBUJOBS-ST-SAME: [[HOSTASM:[^\\/]+\.s]]" "-x" "ir" "{{.*}}[[HOSTBC]]"
646 // CHK-UBUJOBS-ST: clang{{.*}}" "-cc1as" "-triple" "powerpc64le-unknown-linux" "-filetype" "obj" {{.*}}"-o" "
647 // CHK-UBUJOBS-ST-SAME: [[HOSTOBJ:[^\\/]+\.o]]" "{{.*}}[[HOSTASM]]"
648 // CHK-UBUJOBS-ST: clang-offload-bundler{{.*}}" "-type=o" "-targets=openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu,host-powerpc64le-unknown-linux" "-outputs=
649 // CHK-UBUJOBS-ST-SAME: [[RES:[^\\/]+\.o]]" "-inputs={{.*}}[[T1OBJ]],{{.*}}[[T2OBJ]],{{.*}}[[HOSTOBJ]]"
650
651 /// ###########################################################################
652
653 /// Check -fopenmp-is-device is passed when compiling for the device.
654 // RUN:   %clang -### -no-canonical-prefixes -target powerpc64le-linux -fopenmp=libomp -fopenmp-targets=powerpc64le-ibm-linux-gnu %s 2>&1 \
655 // RUN:   | FileCheck -check-prefix=CHK-FOPENMP-IS-DEVICE %s
656
657 // CHK-FOPENMP-IS-DEVICE: clang{{.*}} "-aux-triple" "powerpc64le-unknown-linux" {{.*}}.c" "-fopenmp-is-device" "-fopenmp-host-ir-file-path"