1 #include "clang/Basic/Cuda.h"
3 #include "llvm/ADT/StringRef.h"
4 #include "llvm/ADT/StringSwitch.h"
5 #include "llvm/Support/ErrorHandling.h"
9 const char *CudaVersionToString(CudaVersion V) {
11 case CudaVersion::UNKNOWN:
13 case CudaVersion::CUDA_70:
15 case CudaVersion::CUDA_75:
17 case CudaVersion::CUDA_80:
20 llvm_unreachable("invalid enum");
23 const char *CudaArchToString(CudaArch A) {
25 case CudaArch::UNKNOWN:
52 llvm_unreachable("invalid enum");
55 CudaArch StringToCudaArch(llvm::StringRef S) {
56 return llvm::StringSwitch<CudaArch>(S)
57 .Case("sm_20", CudaArch::SM_20)
58 .Case("sm_21", CudaArch::SM_21)
59 .Case("sm_30", CudaArch::SM_30)
60 .Case("sm_32", CudaArch::SM_32)
61 .Case("sm_35", CudaArch::SM_35)
62 .Case("sm_37", CudaArch::SM_37)
63 .Case("sm_50", CudaArch::SM_50)
64 .Case("sm_52", CudaArch::SM_52)
65 .Case("sm_53", CudaArch::SM_53)
66 .Case("sm_60", CudaArch::SM_60)
67 .Case("sm_61", CudaArch::SM_61)
68 .Case("sm_62", CudaArch::SM_62)
69 .Default(CudaArch::UNKNOWN);
72 const char *CudaVirtualArchToString(CudaVirtualArch A) {
74 case CudaVirtualArch::UNKNOWN:
76 case CudaVirtualArch::COMPUTE_20:
78 case CudaVirtualArch::COMPUTE_30:
80 case CudaVirtualArch::COMPUTE_32:
82 case CudaVirtualArch::COMPUTE_35:
84 case CudaVirtualArch::COMPUTE_37:
86 case CudaVirtualArch::COMPUTE_50:
88 case CudaVirtualArch::COMPUTE_52:
90 case CudaVirtualArch::COMPUTE_53:
92 case CudaVirtualArch::COMPUTE_60:
94 case CudaVirtualArch::COMPUTE_61:
96 case CudaVirtualArch::COMPUTE_62:
99 llvm_unreachable("invalid enum");
102 CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) {
103 return llvm::StringSwitch<CudaVirtualArch>(S)
104 .Case("compute_20", CudaVirtualArch::COMPUTE_20)
105 .Case("compute_30", CudaVirtualArch::COMPUTE_30)
106 .Case("compute_32", CudaVirtualArch::COMPUTE_32)
107 .Case("compute_35", CudaVirtualArch::COMPUTE_35)
108 .Case("compute_37", CudaVirtualArch::COMPUTE_37)
109 .Case("compute_50", CudaVirtualArch::COMPUTE_50)
110 .Case("compute_52", CudaVirtualArch::COMPUTE_52)
111 .Case("compute_53", CudaVirtualArch::COMPUTE_53)
112 .Case("compute_60", CudaVirtualArch::COMPUTE_60)
113 .Case("compute_61", CudaVirtualArch::COMPUTE_61)
114 .Case("compute_62", CudaVirtualArch::COMPUTE_62)
115 .Default(CudaVirtualArch::UNKNOWN);
118 CudaVirtualArch VirtualArchForCudaArch(CudaArch A) {
120 case CudaArch::UNKNOWN:
121 return CudaVirtualArch::UNKNOWN;
122 case CudaArch::SM_20:
123 case CudaArch::SM_21:
124 return CudaVirtualArch::COMPUTE_20;
125 case CudaArch::SM_30:
126 return CudaVirtualArch::COMPUTE_30;
127 case CudaArch::SM_32:
128 return CudaVirtualArch::COMPUTE_32;
129 case CudaArch::SM_35:
130 return CudaVirtualArch::COMPUTE_35;
131 case CudaArch::SM_37:
132 return CudaVirtualArch::COMPUTE_37;
133 case CudaArch::SM_50:
134 return CudaVirtualArch::COMPUTE_50;
135 case CudaArch::SM_52:
136 return CudaVirtualArch::COMPUTE_52;
137 case CudaArch::SM_53:
138 return CudaVirtualArch::COMPUTE_53;
139 case CudaArch::SM_60:
140 return CudaVirtualArch::COMPUTE_60;
141 case CudaArch::SM_61:
142 return CudaVirtualArch::COMPUTE_61;
143 case CudaArch::SM_62:
144 return CudaVirtualArch::COMPUTE_62;
146 llvm_unreachable("invalid enum");
149 CudaVersion MinVersionForCudaArch(CudaArch A) {
151 case CudaArch::UNKNOWN:
152 return CudaVersion::UNKNOWN;
153 case CudaArch::SM_20:
154 case CudaArch::SM_21:
155 case CudaArch::SM_30:
156 case CudaArch::SM_32:
157 case CudaArch::SM_35:
158 case CudaArch::SM_37:
159 case CudaArch::SM_50:
160 case CudaArch::SM_52:
161 case CudaArch::SM_53:
162 return CudaVersion::CUDA_70;
163 case CudaArch::SM_60:
164 case CudaArch::SM_61:
165 case CudaArch::SM_62:
166 return CudaVersion::CUDA_80;
168 llvm_unreachable("invalid enum");