Clang Project

clang_source_code/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"
658