blob: 58b99a3b58cbee610f6415db3542041148cd3c7b [file] [log] [blame]
Justin Lebar62907612016-07-06 21:21:39 +00001#include "clang/Basic/Cuda.h"
2
3#include "llvm/ADT/StringRef.h"
4#include "llvm/ADT/StringSwitch.h"
Justin Lebard9bc4852016-07-07 01:06:59 +00005#include "llvm/Support/ErrorHandling.h"
Justin Lebar62907612016-07-06 21:21:39 +00006
7namespace clang {
8
9const char *CudaVersionToString(CudaVersion V) {
10 switch (V) {
11 case CudaVersion::UNKNOWN:
12 return "unknown";
13 case CudaVersion::CUDA_70:
14 return "7.0";
15 case CudaVersion::CUDA_75:
16 return "7.5";
17 case CudaVersion::CUDA_80:
18 return "8.0";
Artem Belevich8af4e232017-09-07 18:14:32 +000019 case CudaVersion::CUDA_90:
20 return "9.0";
Justin Lebar62907612016-07-06 21:21:39 +000021 }
Justin Lebard9bc4852016-07-07 01:06:59 +000022 llvm_unreachable("invalid enum");
Justin Lebar62907612016-07-06 21:21:39 +000023}
24
25const char *CudaArchToString(CudaArch A) {
26 switch (A) {
27 case CudaArch::UNKNOWN:
28 return "unknown";
29 case CudaArch::SM_20:
30 return "sm_20";
31 case CudaArch::SM_21:
32 return "sm_21";
33 case CudaArch::SM_30:
34 return "sm_30";
35 case CudaArch::SM_32:
36 return "sm_32";
37 case CudaArch::SM_35:
38 return "sm_35";
39 case CudaArch::SM_37:
40 return "sm_37";
41 case CudaArch::SM_50:
42 return "sm_50";
43 case CudaArch::SM_52:
44 return "sm_52";
45 case CudaArch::SM_53:
46 return "sm_53";
47 case CudaArch::SM_60:
48 return "sm_60";
49 case CudaArch::SM_61:
50 return "sm_61";
51 case CudaArch::SM_62:
52 return "sm_62";
Artem Belevich8af4e232017-09-07 18:14:32 +000053 case CudaArch::SM_70:
54 return "sm_70";
Justin Lebar62907612016-07-06 21:21:39 +000055 }
Justin Lebard9bc4852016-07-07 01:06:59 +000056 llvm_unreachable("invalid enum");
Justin Lebar62907612016-07-06 21:21:39 +000057}
58
59CudaArch StringToCudaArch(llvm::StringRef S) {
60 return llvm::StringSwitch<CudaArch>(S)
61 .Case("sm_20", CudaArch::SM_20)
62 .Case("sm_21", CudaArch::SM_21)
63 .Case("sm_30", CudaArch::SM_30)
64 .Case("sm_32", CudaArch::SM_32)
65 .Case("sm_35", CudaArch::SM_35)
66 .Case("sm_37", CudaArch::SM_37)
67 .Case("sm_50", CudaArch::SM_50)
68 .Case("sm_52", CudaArch::SM_52)
69 .Case("sm_53", CudaArch::SM_53)
70 .Case("sm_60", CudaArch::SM_60)
71 .Case("sm_61", CudaArch::SM_61)
72 .Case("sm_62", CudaArch::SM_62)
Artem Belevich8af4e232017-09-07 18:14:32 +000073 .Case("sm_70", CudaArch::SM_70)
Justin Lebar62907612016-07-06 21:21:39 +000074 .Default(CudaArch::UNKNOWN);
75}
76
77const char *CudaVirtualArchToString(CudaVirtualArch A) {
78 switch (A) {
79 case CudaVirtualArch::UNKNOWN:
80 return "unknown";
81 case CudaVirtualArch::COMPUTE_20:
82 return "compute_20";
83 case CudaVirtualArch::COMPUTE_30:
84 return "compute_30";
85 case CudaVirtualArch::COMPUTE_32:
86 return "compute_32";
87 case CudaVirtualArch::COMPUTE_35:
88 return "compute_35";
89 case CudaVirtualArch::COMPUTE_37:
90 return "compute_37";
91 case CudaVirtualArch::COMPUTE_50:
92 return "compute_50";
93 case CudaVirtualArch::COMPUTE_52:
94 return "compute_52";
95 case CudaVirtualArch::COMPUTE_53:
96 return "compute_53";
97 case CudaVirtualArch::COMPUTE_60:
98 return "compute_60";
99 case CudaVirtualArch::COMPUTE_61:
100 return "compute_61";
101 case CudaVirtualArch::COMPUTE_62:
102 return "compute_62";
Artem Belevich8af4e232017-09-07 18:14:32 +0000103 case CudaVirtualArch::COMPUTE_70:
104 return "compute_70";
Justin Lebar62907612016-07-06 21:21:39 +0000105 }
Justin Lebard9bc4852016-07-07 01:06:59 +0000106 llvm_unreachable("invalid enum");
Justin Lebar62907612016-07-06 21:21:39 +0000107}
108
109CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) {
110 return llvm::StringSwitch<CudaVirtualArch>(S)
111 .Case("compute_20", CudaVirtualArch::COMPUTE_20)
112 .Case("compute_30", CudaVirtualArch::COMPUTE_30)
113 .Case("compute_32", CudaVirtualArch::COMPUTE_32)
114 .Case("compute_35", CudaVirtualArch::COMPUTE_35)
115 .Case("compute_37", CudaVirtualArch::COMPUTE_37)
116 .Case("compute_50", CudaVirtualArch::COMPUTE_50)
117 .Case("compute_52", CudaVirtualArch::COMPUTE_52)
118 .Case("compute_53", CudaVirtualArch::COMPUTE_53)
119 .Case("compute_60", CudaVirtualArch::COMPUTE_60)
120 .Case("compute_61", CudaVirtualArch::COMPUTE_61)
121 .Case("compute_62", CudaVirtualArch::COMPUTE_62)
Artem Belevich8af4e232017-09-07 18:14:32 +0000122 .Case("compute_70", CudaVirtualArch::COMPUTE_70)
Justin Lebar62907612016-07-06 21:21:39 +0000123 .Default(CudaVirtualArch::UNKNOWN);
124}
125
126CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
127 switch (A) {
128 case CudaArch::UNKNOWN:
129 return CudaVirtualArch::UNKNOWN;
130 case CudaArch::SM_20:
131 case CudaArch::SM_21:
132 return CudaVirtualArch::COMPUTE_20;
133 case CudaArch::SM_30:
134 return CudaVirtualArch::COMPUTE_30;
135 case CudaArch::SM_32:
136 return CudaVirtualArch::COMPUTE_32;
137 case CudaArch::SM_35:
138 return CudaVirtualArch::COMPUTE_35;
139 case CudaArch::SM_37:
140 return CudaVirtualArch::COMPUTE_37;
141 case CudaArch::SM_50:
142 return CudaVirtualArch::COMPUTE_50;
143 case CudaArch::SM_52:
144 return CudaVirtualArch::COMPUTE_52;
145 case CudaArch::SM_53:
146 return CudaVirtualArch::COMPUTE_53;
147 case CudaArch::SM_60:
148 return CudaVirtualArch::COMPUTE_60;
149 case CudaArch::SM_61:
150 return CudaVirtualArch::COMPUTE_61;
151 case CudaArch::SM_62:
152 return CudaVirtualArch::COMPUTE_62;
Artem Belevich8af4e232017-09-07 18:14:32 +0000153 case CudaArch::SM_70:
154 return CudaVirtualArch::COMPUTE_70;
Justin Lebar62907612016-07-06 21:21:39 +0000155 }
Justin Lebard9bc4852016-07-07 01:06:59 +0000156 llvm_unreachable("invalid enum");
Justin Lebar62907612016-07-06 21:21:39 +0000157}
158
159CudaVersion MinVersionForCudaArch(CudaArch A) {
160 switch (A) {
161 case CudaArch::UNKNOWN:
162 return CudaVersion::UNKNOWN;
163 case CudaArch::SM_20:
164 case CudaArch::SM_21:
165 case CudaArch::SM_30:
166 case CudaArch::SM_32:
167 case CudaArch::SM_35:
168 case CudaArch::SM_37:
169 case CudaArch::SM_50:
170 case CudaArch::SM_52:
171 case CudaArch::SM_53:
172 return CudaVersion::CUDA_70;
173 case CudaArch::SM_60:
174 case CudaArch::SM_61:
175 case CudaArch::SM_62:
176 return CudaVersion::CUDA_80;
Artem Belevich8af4e232017-09-07 18:14:32 +0000177 case CudaArch::SM_70:
178 return CudaVersion::CUDA_90;
Justin Lebar62907612016-07-06 21:21:39 +0000179 }
Justin Lebard9bc4852016-07-07 01:06:59 +0000180 llvm_unreachable("invalid enum");
Justin Lebar62907612016-07-06 21:21:39 +0000181}
182
Justin Lebar066494d2017-10-25 21:32:06 +0000183CudaVersion MaxVersionForCudaArch(CudaArch A) {
184 switch (A) {
185 case CudaArch::UNKNOWN:
186 return CudaVersion::UNKNOWN;
187 case CudaArch::SM_20:
188 case CudaArch::SM_21:
189 return CudaVersion::CUDA_80;
190 default:
191 return CudaVersion::LATEST;
192 }
193}
194
Justin Lebar62907612016-07-06 21:21:39 +0000195} // namespace clang