Clang Project

clang_source_code/test/Driver/cuda-bindings.cu
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