1 // Tests the bindings generated for a CUDA offloading target for different 2 // combinations of: 3 // - Number of gpu architectures; 4 // - Host/device-only compilation; 5 // - User-requested final phase - binary or assembly. 6 // It parallels cuda-phases.cu test, but verifies whether output file is temporary or not. 7 8 // It's hard to check whether file name is temporary in a portable 9 // way. Instead we check whether we've generated a permanent name on 10 // device side, which appends '-device-cuda-<triple>' suffix. 11 12 // REQUIRES: clang-driver 13 // REQUIRES: powerpc-registered-target 14 // REQUIRES: nvptx-registered-target 15 16 // 17 // Test single gpu architecture with complete compilation. 18 // No intermediary device files should have "-device-cuda..." in the name. 19 // 20 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings --cuda-gpu-arch=sm_30 %s 2>&1 \ 21 // RUN: | FileCheck -check-prefix=BIN %s 22 // BIN: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 23 // BIN-NOT: cuda-bindings-device-cuda-nvptx64 24 // BIN: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: 25 // BIN-NOT: cuda-bindings-device-cuda-nvptx64 26 // BIN: # "nvptx64-nvidia-cuda" - "NVPTX::Linker",{{.*}} output: 27 // BIN-NOT: cuda-bindings-device-cuda-nvptx64 28 // BIN: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: 29 // BIN-NOT: cuda-bindings-device-cuda-nvptx64 30 // BIN: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "a.out" 31 32 // 33 // Test single gpu architecture up to the assemble phase. 34 // 35 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings --cuda-gpu-arch=sm_30 %s -S 2>&1 \ 36 // RUN: | FileCheck -check-prefix=ASM %s 37 // ASM-DAG: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" 38 // ASM-DAG: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: "cuda-bindings.s" 39 40 // 41 // Test two gpu architectures with complete compilation. 42 // 43 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s 2>&1 \ 44 // RUN: | FileCheck -check-prefix=BIN2 %s 45 // BIN2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 46 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 47 // BIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: 48 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 49 // BIN2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 50 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 51 // BIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: 52 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 53 // BIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Linker",{{.*}} output: 54 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 55 // BIN2: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: 56 // BIN2-NOT: cuda-bindings-device-cuda-nvptx64 57 // BIN2: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "a.out" 58 59 // 60 // Test two gpu architectures up to the assemble phase. 61 // 62 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 63 // RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s -S 2>&1 \ 64 // RUN: | FileCheck -check-prefix=ASM2 %s 65 // ASM2-DAG: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" 66 // ASM2-DAG: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_35.s" 67 // ASM2-DAG: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: "cuda-bindings.s" 68 69 // 70 // Test one or more gpu architecture with complete compilation in host-only 71 // compilation mode. 72 // 73 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 74 // RUN: --cuda-gpu-arch=sm_30 %s --cuda-host-only 2>&1 \ 75 // RUN: | FileCheck -check-prefix=HBIN %s 76 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 77 // RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s --cuda-host-only 2>&1 \ 78 // RUN: | FileCheck -check-prefix=HBIN %s 79 // HBIN: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: 80 // HBIN-NOT: cuda-bindings-device-cuda-nvptx64 81 // HBIN: # "powerpc64le-ibm-linux-gnu" - "GNU::Linker", inputs:{{.*}}, output: "a.out" 82 83 // 84 // Test one or more gpu architecture up to the assemble phase in host-only 85 // compilation mode. 86 // 87 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 88 // RUN: --cuda-gpu-arch=sm_30 %s --cuda-host-only -S 2>&1 \ 89 // RUN: | FileCheck -check-prefix=HASM %s 90 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 91 // RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s --cuda-host-only -S 2>&1 \ 92 // RUN: | FileCheck -check-prefix=HASM %s 93 // HASM: # "powerpc64le-ibm-linux-gnu" - "clang",{{.*}} output: "cuda-bindings.s" 94 95 // 96 // Test single gpu architecture with complete compilation in device-only 97 // compilation mode. 98 // 99 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 100 // RUN: --cuda-gpu-arch=sm_30 %s --cuda-device-only 2>&1 \ 101 // RUN: | FileCheck -check-prefix=DBIN %s 102 // DBIN: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 103 // DBIN-NOT: cuda-bindings-device-cuda-nvptx64 104 // DBIN: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.o" 105 106 // 107 // Test single gpu architecture up to the assemble phase in device-only 108 // compilation mode. 109 // 110 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 111 // RUN: --cuda-gpu-arch=sm_30 %s --cuda-device-only -S 2>&1 \ 112 // RUN: | FileCheck -check-prefix=DASM %s 113 // DASM: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" 114 115 // 116 // Test two gpu architectures with complete compilation in device-only 117 // compilation mode. 118 // 119 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 120 // RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s --cuda-device-only 2>&1 \ 121 // RUN: | FileCheck -check-prefix=DBIN2 %s 122 // DBIN2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 123 // DBIN2-NOT: cuda-bindings-device-cuda-nvptx64 124 // DBIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.o" 125 // DBIN2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: 126 // DBIN2-NOT: cuda-bindings-device-cuda-nvptx64 127 // DBIN2: # "nvptx64-nvidia-cuda" - "NVPTX::Assembler",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_35.o" 128 129 // 130 // Test two gpu architectures up to the assemble phase in device-only 131 // compilation mode. 132 // 133 // RUN: %clang -target powerpc64le-ibm-linux-gnu -ccc-print-bindings \ 134 // RUN: --cuda-gpu-arch=sm_30 --cuda-gpu-arch=sm_35 %s --cuda-device-only -S 2>&1 \ 135 // RUN: | FileCheck -check-prefix=DASM2 %s 136 // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_30.s" 137 // DASM2: # "nvptx64-nvidia-cuda" - "clang",{{.*}} output: "cuda-bindings-cuda-nvptx64-nvidia-cuda-sm_35.s" 138