1 | //===--- Cuda.h - Utilities for compiling CUDA code ------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #ifndef LLVM_CLANG_BASIC_CUDA_H |
10 | #define LLVM_CLANG_BASIC_CUDA_H |
11 | |
12 | #include "clang/Basic/OffloadArch.h" |
13 | |
14 | namespace llvm { |
15 | class StringRef; |
16 | class Twine; |
17 | class VersionTuple; |
18 | } // namespace llvm |
19 | |
20 | namespace clang { |
21 | |
22 | enum class CudaVersion { |
23 | UNKNOWN, |
24 | CUDA_70, |
25 | CUDA_75, |
26 | CUDA_80, |
27 | CUDA_90, |
28 | CUDA_91, |
29 | CUDA_92, |
30 | CUDA_100, |
31 | CUDA_101, |
32 | CUDA_102, |
33 | CUDA_110, |
34 | CUDA_111, |
35 | CUDA_112, |
36 | CUDA_113, |
37 | CUDA_114, |
38 | CUDA_115, |
39 | CUDA_116, |
40 | CUDA_117, |
41 | CUDA_118, |
42 | CUDA_120, |
43 | CUDA_121, |
44 | CUDA_122, |
45 | CUDA_123, |
46 | CUDA_124, |
47 | CUDA_125, |
48 | CUDA_126, |
49 | CUDA_128, |
50 | FULLY_SUPPORTED = CUDA_123, |
51 | PARTIALLY_SUPPORTED = |
52 | CUDA_128, // Partially supported. Proceed with a warning. |
53 | NEW = 10000, // Too new. Issue a warning, but allow using it. |
54 | }; |
55 | const char *CudaVersionToString(CudaVersion V); |
56 | // Input is "Major.Minor" |
57 | CudaVersion CudaStringToVersion(const llvm::Twine &S); |
58 | |
59 | enum class CUDAFunctionTarget { |
60 | Device, |
61 | Global, |
62 | Host, |
63 | HostDevice, |
64 | InvalidTarget |
65 | }; |
66 | |
67 | /// Get the earliest CudaVersion that supports the given OffloadArch. |
68 | CudaVersion MinVersionForOffloadArch(OffloadArch A); |
69 | |
70 | /// Get the latest CudaVersion that supports the given OffloadArch. |
71 | CudaVersion MaxVersionForOffloadArch(OffloadArch A); |
72 | |
73 | // Various SDK-dependent features that affect CUDA compilation |
74 | enum class CudaFeature { |
75 | // CUDA-9.2+ uses a new API for launching kernels. |
76 | CUDA_USES_NEW_LAUNCH, |
77 | // CUDA-10.1+ needs explicit end of GPU binary registration. |
78 | CUDA_USES_FATBIN_REGISTER_END, |
79 | }; |
80 | |
81 | CudaVersion ToCudaVersion(llvm::VersionTuple); |
82 | bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature); |
83 | bool CudaFeatureEnabled(CudaVersion, CudaFeature); |
84 | |
85 | } // namespace clang |
86 | |
87 | #endif |
88 | |