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 {"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
49 {"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
50};
51#undef CUDA_ENTRY
52
54 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
55 if (I->Version == V)
56 return I->Name;
57
59}
60
61CudaVersion CudaStringToVersion(const llvm::Twine &S) {
62 std::string VS = S.str();
63 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
64 if (I->Name == VS)
65 return I->Version;
67}
68
69CudaVersion ToCudaVersion(llvm::VersionTuple Version) {
70 for (auto *I = CudaNameVersionMap; I->Version != CudaVersion::UNKNOWN; ++I)
71 if (I->TVersion == Version)
72 return I->Version;
74}
75
77 if (A == OffloadArch::UNKNOWN)
79
80 // AMD GPUs do not depend on CUDA versions.
81 if (IsAMDOffloadArch(A))
83
84 switch (A) {
128 default:
129 llvm_unreachable("invalid enum");
130 }
131}
132
134 // AMD GPUs do not depend on CUDA versions.
135 if (IsAMDOffloadArch(A))
136 return CudaVersion::NEW;
137
138 switch (A) {
150 default:
151 return CudaVersion::NEW;
152 }
153}
154
155bool CudaFeatureEnabled(llvm::VersionTuple Version, CudaFeature Feature) {
156 return CudaFeatureEnabled(ToCudaVersion(Version), Feature);
157}
158
160 switch (Feature) {
162 return Version >= CudaVersion::CUDA_92;
164 return Version >= CudaVersion::CUDA_101;
165 }
166 llvm_unreachable("Unknown CUDA feature.");
167}
168} // namespace clang
#define V(N, I)
Definition: ASTContext.h:3597
#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:133
static bool IsAMDOffloadArch(OffloadArch A)
Definition: OffloadArch.h:123
OffloadArch
Definition: OffloadArch.h:18
CudaVersion ToCudaVersion(llvm::VersionTuple)
Definition: Cuda.cpp:69
CudaVersion CudaStringToVersion(const llvm::Twine &S)
Definition: Cuda.cpp:61
bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)
Definition: Cuda.cpp:155
const char * CudaVersionToString(CudaVersion V)
Definition: Cuda.cpp:53
static const CudaVersionMapEntry CudaNameVersionMap[]
Definition: Cuda.cpp:20
CudaVersion
Definition: Cuda.h:22
CudaFeature
Definition: Cuda.h:75
CudaVersion MinVersionForOffloadArch(OffloadArch A)
Get the earliest CudaVersion that supports the given OffloadArch.
Definition: Cuda.cpp:76
llvm::VersionTuple TVersion
Definition: Cuda.cpp:12
const char * Name
Definition: Cuda.cpp:10
CudaVersion Version
Definition: Cuda.cpp:11