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