clang 22.0.0git
Cuda.cpp
Go to the documentation of this file.
1#include "clang/Basic/Cuda.h"
2
3#include "llvm/ADT/Twine.h"
4#include "llvm/Support/ErrorHandling.h"
5#include "llvm/Support/VersionTuple.h"
6
7namespace clang {
8
10 const char *Name;
12 llvm::VersionTuple TVersion;
13};
14#define CUDA_ENTRY(major, minor) \
15 { \
16 #major "." #minor, CudaVersion::CUDA_##major##minor, \
17 llvm::VersionTuple(major, minor) \
18 }
19
21 CUDA_ENTRY(7, 0),
22 CUDA_ENTRY(7, 5),
23 CUDA_ENTRY(8, 0),
24 CUDA_ENTRY(9, 0),
25 CUDA_ENTRY(9, 1),
26 CUDA_ENTRY(9, 2),
27 CUDA_ENTRY(10, 0),
28 CUDA_ENTRY(10, 1),
29 CUDA_ENTRY(10, 2),
30 CUDA_ENTRY(11, 0),
31 CUDA_ENTRY(11, 1),
32 CUDA_ENTRY(11, 2),
33 CUDA_ENTRY(11, 3),
34 CUDA_ENTRY(11, 4),
35 CUDA_ENTRY(11, 5),
36 CUDA_ENTRY(11, 6),
37 CUDA_ENTRY(11, 7),
38 CUDA_ENTRY(11, 8),
39 CUDA_ENTRY(12, 0),
40 CUDA_ENTRY(12, 1),
41 CUDA_ENTRY(12, 2),
42 CUDA_ENTRY(12, 3),
43 CUDA_ENTRY(12, 4),
44 CUDA_ENTRY(12, 5),
45 CUDA_ENTRY(12, 6),
46 CUDA_ENTRY(12, 8),
47 CUDA_ENTRY(12, 9),
48 CUDA_ENTRY(13, 0),
49 {"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
50 {"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
51};
52#undef CUDA_ENTRY
53
55 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
56 if (I->Version == V)
57 return I->Name;
58
60}
61
62CudaVersion CudaStringToVersion(const llvm::Twine &S) {
63 std::string VS = S.str();
64 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
65 if (I->Name == VS)
66 return I->Version;
68}
69
70CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
71 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
72 if (I->TVersion == Version)
73 return I->Version;
75}
76
78 if (A == OffloadArch::UNKNOWN)
80
81 // AMD GPUs do not depend on CUDA versions.
82 if (IsAMDOffloadArch(A))
84
85 switch (A) {
133 default:
134 llvm_unreachable("invalid enum");
135 }
136}
137
139 // AMD GPUs do not depend on CUDA versions.
140 if (IsAMDOffloadArch(A))
141 return CudaVersion::NEW;
142
143 switch (A) {
158 default:
159 return CudaVersion::NEW;
160 }
161}
162
163bool CudaFeatureEnabled(llvm::VersionTuple Version, CudaFeature Feature) {
164 return CudaFeatureEnabled(ToCudaVersion(Version), Feature);
165}
166
168 switch (Feature) {
170 return Version >= CudaVersion::CUDA_92;
172 return Version >= CudaVersion::CUDA_101;
173 }
174 llvm_unreachable("Unknown CUDA feature.");
175}
176} // namespace clang
#define V(N, I)
#define CUDA_ENTRY(major, minor)
Definition Cuda.cpp:14
The JSON file list parser is used to communicate input to InstallAPI.
CudaVersion MaxVersionForOffloadArch(OffloadArch A)
Get the latest CudaVersion that supports the given OffloadArch.
Definition Cuda.cpp:138
static bool IsAMDOffloadArch(OffloadArch A)
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition Cuda.cpp:70
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition Cuda.cpp:62
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition Cuda.cpp:163
const char * CudaVersionToString(CudaVersion V)
Definition Cuda.cpp:54
static const CudaVersionMapEntry CudaNameVersionMap[]
Definition Cuda.cpp:20
CudaVersion
Definition Cuda.h:22
CudaFeature
Definition Cuda.h:76
@ CUDA_USES_NEW_LAUNCH
Definition Cuda.h:78
@ CUDA_USES_FATBIN_REGISTER_END
Definition Cuda.h:80
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition Cuda.cpp:77
llvm::VersionTuple TVersion
Definition Cuda.cpp:12