| 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 | |