| // REQUIRES: clang-driver |
| // REQUIRES: x86-registered-target |
| // REQUIRES: amdgpu-registered-target |
| |
| // If -emit-llvm and/or -S is used in device only compilation, |
| // the output should not be bundled, except --gpu-bundle-output |
| // is specified. |
| |
| // Output unbundled bitcode. |
| // RUN: %clang -c -emit-llvm --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.bc -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,BC,NBUN %s |
| |
| // Output bundled bitcode. |
| // RUN: %clang -c -emit-llvm --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.bc -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu --gpu-bundle-output \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,BCBUN %s |
| |
| // Output unbundled LLVM IR. |
| // RUN: %clang -c -S -emit-llvm --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.ll -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,LL,NBUN %s |
| |
| // Output bundled LLVM IR. |
| // RUN: %clang -c -S -emit-llvm --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.ll -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu --gpu-bundle-output \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,LLBUN %s |
| |
| // Output unbundled assembly. |
| // RUN: %clang -c -S --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.s -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,ASM,NBUN %s |
| |
| // Output bundled assembly. |
| // RUN: %clang -c -S --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.s -x hip --cuda-gpu-arch=gfx900 --no-gpu-bundle-output \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu --gpu-bundle-output \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=CHECK,ASMBUN %s |
| |
| // CHECK: {{".*clang.*"}} "-cc1" "-triple" "amdgcn-amd-amdhsa" |
| // CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu" |
| // BC-SAME: "-emit-llvm-bc" |
| // LL-SAME: "-emit-llvm" |
| // ASM-NOT: "-emit-llvm" |
| // CHECK-SAME: "-main-file-name" "a.cu" |
| // CHECK-SAME: "-fcuda-is-device" |
| // CHECK-SAME: {{".*lib1.bc"}} |
| // CHECK-SAME: "-target-cpu" "gfx900" |
| // BC-SAME: "-o" "a.bc" |
| // BCBUN-SAME: "-o" "{{.*}}.bc" |
| // LL-SAME: "-o" "a.ll" |
| // LLBUN-SAME: "-o" "{{.*}}.ll" |
| // ASM-SAME: "-o" "a.s" |
| // ASMBUN-SAME: "-o" "{{.*}}.s" |
| // CHECK-SAME: {{".*a.cu"}} |
| |
| // CHECK-NOT: {{"*.llvm-link"}} |
| // CHECK-NOT: {{".*opt"}} |
| // CHECK-NOT: {{".*llc"}} |
| // CHECK-NOT: {{".*lld.*"}} |
| // NBUN-NOT: {{".*clang-offload-bundler"}} |
| // BCBUN: {{".*clang-offload-bundler"}}{{.*}}"-outputs=a.bc" |
| // LLBUN: {{".*clang-offload-bundler"}}{{.*}}"-outputs=a.ll" |
| // ASMBUN: {{".*clang-offload-bundler"}}{{.*}}"-outputs=a.s" |
| // CHECK-NOT: {{".*ld.*"}}{{.*}}"-o" |
| |
| // If neither -emit-llvm nor -S is used in device only compilation, |
| // the output should be bundled except --no-gpu-bundle-output is |
| // specified. |
| |
| // Output bundled code objects. |
| // RUN: %clang -c --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.o -x hip --cuda-gpu-arch=gfx900 \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=OBJ,OBJ-BUN %s |
| |
| // Output unbundled code objects. |
| // RUN: %clang -c --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.o -x hip --cuda-gpu-arch=gfx900 \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu --no-gpu-bundle-output \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=OBJ,OBJ-UBUN %s |
| |
| // Output bundled code objects. |
| // RUN: %clang --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.o -x hip --cuda-gpu-arch=gfx900 \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=OBJ,OBJ-BUN %s |
| |
| // Output unbundled code objects. |
| // RUN: %clang --cuda-device-only -### -target x86_64-linux-gnu \ |
| // RUN: -o a.o -x hip --cuda-gpu-arch=gfx900 \ |
| // RUN: --hip-device-lib=lib1.bc \ |
| // RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \ |
| // RUN: %S/Inputs/hip_multiple_inputs/a.cu --no-gpu-bundle-output \ |
| // RUN: 2>&1 | FileCheck -check-prefixes=OBJ,OBJ-UBUN %s |
| |
| // OBJ: {{"*.clang.*"}} {{.*}} "-emit-obj" |
| // OBJ-NOT: {{"*.llvm-link"}} |
| // OBJ-NOT: {{".*opt"}} |
| // OBJ-NOT: {{".*llc"}} |
| // OBJ-BUN: {{".*lld.*"}}{{.*}}"-o" "{{.*}}.o" |
| // OBJ-UBUN: {{".*lld.*"}}{{.*}}"-o" "a.o" |
| // OBJ-BUN: {{".*clang-offload-bundler"}}{{.*}}"-outputs=a.o" |
| // OBJ-UBUN-NOT: {{".*clang-offload-bundler"}} |