xref: /aosp_15_r20/external/clang/test/Driver/cuda-version-check.cu (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // REQUIRES: clang-driver
2*67e74705SXin Li // REQUIRES: x86-registered-target
3*67e74705SXin Li // REQUIRES: nvptx-registered-target
4*67e74705SXin Li 
5*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_20 --sysroot=%S/Inputs/CUDA 2>&1 %s | \
6*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=OK
7*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_20 --sysroot=%S/Inputs/CUDA_80 2>&1 %s | \
8*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=OK
9*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 --sysroot=%S/Inputs/CUDA_80 2>&1 %s | \
10*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=OK
11*67e74705SXin Li 
12*67e74705SXin Li // The installation at Inputs/CUDA is CUDA 7.0, which doesn't support sm_60.
13*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 --sysroot=%S/Inputs/CUDA 2>&1 %s | \
14*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=ERR_SM60
15*67e74705SXin Li 
16*67e74705SXin Li // This should only complain about sm_60, not sm_35.
17*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 --cuda-gpu-arch=sm_35 \
18*67e74705SXin Li // RUN:    --sysroot=%S/Inputs/CUDA 2>&1 %s | \
19*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=ERR_SM60 --check-prefix=OK_SM35
20*67e74705SXin Li 
21*67e74705SXin Li // We should get two errors here, one for sm_60 and one for sm_61.
22*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 --cuda-gpu-arch=sm_61 \
23*67e74705SXin Li // RUN:    --sysroot=%S/Inputs/CUDA 2>&1 %s | \
24*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=ERR_SM60 --check-prefix=ERR_SM61
25*67e74705SXin Li 
26*67e74705SXin Li // We should still get an error if we pass -nocudainc, because this compilation
27*67e74705SXin Li // would invoke ptxas, and we do a version check on that, too.
28*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 -nocudainc --sysroot=%S/Inputs/CUDA 2>&1 %s | \
29*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=ERR_SM60
30*67e74705SXin Li 
31*67e74705SXin Li // If with -nocudainc and -E, we don't touch the CUDA install, so we
32*67e74705SXin Li // shouldn't get an error.
33*67e74705SXin Li // RUN: %clang -v -### -E --cuda-device-only --cuda-gpu-arch=sm_60 -nocudainc \
34*67e74705SXin Li // RUN:    --sysroot=%S/Inputs/CUDA 2>&1 %s | \
35*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=OK
36*67e74705SXin Li 
37*67e74705SXin Li // --no-cuda-version-check should suppress all of these errors.
38*67e74705SXin Li // RUN: %clang -v -### --cuda-gpu-arch=sm_60 --sysroot=%S/Inputs/CUDA 2>&1 \
39*67e74705SXin Li // RUN:    --no-cuda-version-check %s | \
40*67e74705SXin Li // RUN:    FileCheck %s --check-prefix=OK
41*67e74705SXin Li 
42*67e74705SXin Li // OK-NOT: error: GPU arch
43*67e74705SXin Li 
44*67e74705SXin Li // OK_SM35-NOT: error: GPU arch sm_35
45*67e74705SXin Li 
46*67e74705SXin Li // We should only get one error per architecture.
47*67e74705SXin Li // ERR_SM60: error: GPU arch sm_60 {{.*}}
48*67e74705SXin Li // ERR_SM60-NOT: error: GPU arch sm_60
49*67e74705SXin Li 
50*67e74705SXin Li // ERR_SM61: error: GPU arch sm_61 {{.*}}
51*67e74705SXin Li // ERR_SM61-NOT: error: GPU arch sm_61
52