clang  3.9.0
Cuda.cpp
Go to the documentation of this file.
1 #include "clang/Basic/Cuda.h"
2 
3 #include "llvm/ADT/StringRef.h"
4 #include "llvm/ADT/StringSwitch.h"
5 #include "llvm/Support/ErrorHandling.h"
6 
7 namespace clang {
8 
10  switch (V) {
12  return "unknown";
14  return "7.0";
16  return "7.5";
18  return "8.0";
19  }
20  llvm_unreachable("invalid enum");
21 }
22 
23 const char *CudaArchToString(CudaArch A) {
24  switch (A) {
25  case CudaArch::UNKNOWN:
26  return "unknown";
27  case CudaArch::SM_20:
28  return "sm_20";
29  case CudaArch::SM_21:
30  return "sm_21";
31  case CudaArch::SM_30:
32  return "sm_30";
33  case CudaArch::SM_32:
34  return "sm_32";
35  case CudaArch::SM_35:
36  return "sm_35";
37  case CudaArch::SM_37:
38  return "sm_37";
39  case CudaArch::SM_50:
40  return "sm_50";
41  case CudaArch::SM_52:
42  return "sm_52";
43  case CudaArch::SM_53:
44  return "sm_53";
45  case CudaArch::SM_60:
46  return "sm_60";
47  case CudaArch::SM_61:
48  return "sm_61";
49  case CudaArch::SM_62:
50  return "sm_62";
51  }
52  llvm_unreachable("invalid enum");
53 }
54 
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);
70 }
71 
73  switch (A) {
75  return "unknown";
77  return "compute_20";
79  return "compute_30";
81  return "compute_32";
83  return "compute_35";
85  return "compute_37";
87  return "compute_50";
89  return "compute_52";
91  return "compute_53";
93  return "compute_60";
95  return "compute_61";
97  return "compute_62";
98  }
99  llvm_unreachable("invalid enum");
100 }
101 
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);
116 }
117 
119  switch (A) {
120  case CudaArch::UNKNOWN:
122  case CudaArch::SM_20:
123  case CudaArch::SM_21:
125  case CudaArch::SM_30:
127  case CudaArch::SM_32:
129  case CudaArch::SM_35:
131  case CudaArch::SM_37:
133  case CudaArch::SM_50:
135  case CudaArch::SM_52:
137  case CudaArch::SM_53:
139  case CudaArch::SM_60:
141  case CudaArch::SM_61:
143  case CudaArch::SM_62:
145  }
146  llvm_unreachable("invalid enum");
147 }
148 
150  switch (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;
167  }
168  llvm_unreachable("invalid enum");
169 }
170 
171 } // namespace clang
CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S)
Definition: Cuda.cpp:102
CudaArch
Definition: Cuda.h:30
const char * CudaArchToString(CudaArch A)
Definition: Cuda.cpp:23
CudaArch StringToCudaArch(llvm::StringRef S)
Definition: Cuda.cpp:55
const char * CudaVersionToString(CudaVersion V)
Definition: Cuda.cpp:9
const char * CudaVirtualArchToString(CudaVirtualArch A)
Definition: Cuda.cpp:72
CudaVersion
Definition: Cuda.h:19
CudaVirtualArch
Definition: Cuda.h:50
CudaVersion MinVersionForCudaArch(CudaArch A)
Get the earliest CudaVersion that supports the given CudaArch.
Definition: Cuda.cpp:149
CudaVirtualArch VirtualArchForCudaArch(CudaArch A)
Get the compute_xx corresponding to an sm_yy.
Definition: Cuda.cpp:118