/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/tools/clang/lib/Basic/Cuda.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | |
9 | 44 | const char *CudaVersionToString(CudaVersion V) { |
10 | 44 | switch (V) { |
11 | 0 | case CudaVersion::UNKNOWN: |
12 | 0 | return "unknown"; |
13 | 29 | case CudaVersion::CUDA_70: |
14 | 29 | return "7.0"; |
15 | 0 | case CudaVersion::CUDA_75: |
16 | 0 | return "7.5"; |
17 | 15 | case CudaVersion::CUDA_80: |
18 | 15 | return "8.0"; |
19 | 0 | case CudaVersion::CUDA_90: |
20 | 0 | return "9.0"; |
21 | 0 | } |
22 | 0 | llvm_unreachable0 ("invalid enum"); |
23 | 0 | } |
24 | | |
25 | 376 | const char *CudaArchToString(CudaArch A) { |
26 | 376 | switch (A) { |
27 | 0 | case CudaArch::UNKNOWN: |
28 | 0 | return "unknown"; |
29 | 188 | case CudaArch::SM_20: |
30 | 188 | return "sm_20"; |
31 | 6 | case CudaArch::SM_21: |
32 | 6 | return "sm_21"; |
33 | 44 | case CudaArch::SM_30: |
34 | 44 | return "sm_30"; |
35 | 6 | case CudaArch::SM_32: |
36 | 6 | return "sm_32"; |
37 | 62 | case CudaArch::SM_35: |
38 | 62 | return "sm_35"; |
39 | 6 | case CudaArch::SM_37: |
40 | 6 | return "sm_37"; |
41 | 9 | case CudaArch::SM_50: |
42 | 9 | return "sm_50"; |
43 | 6 | case CudaArch::SM_52: |
44 | 6 | return "sm_52"; |
45 | 3 | case CudaArch::SM_53: |
46 | 3 | return "sm_53"; |
47 | 33 | case CudaArch::SM_60: |
48 | 33 | return "sm_60"; |
49 | 7 | case CudaArch::SM_61: |
50 | 7 | return "sm_61"; |
51 | 3 | case CudaArch::SM_62: |
52 | 3 | return "sm_62"; |
53 | 3 | case CudaArch::SM_70: |
54 | 3 | return "sm_70"; |
55 | 0 | } |
56 | 0 | llvm_unreachable0 ("invalid enum"); |
57 | 0 | } |
58 | | |
59 | 566 | CudaArch StringToCudaArch(llvm::StringRef S) { |
60 | 566 | return llvm::StringSwitch<CudaArch>(S) |
61 | 566 | .Case("sm_20", CudaArch::SM_20) |
62 | 566 | .Case("sm_21", CudaArch::SM_21) |
63 | 566 | .Case("sm_30", CudaArch::SM_30) |
64 | 566 | .Case("sm_32", CudaArch::SM_32) |
65 | 566 | .Case("sm_35", CudaArch::SM_35) |
66 | 566 | .Case("sm_37", CudaArch::SM_37) |
67 | 566 | .Case("sm_50", CudaArch::SM_50) |
68 | 566 | .Case("sm_52", CudaArch::SM_52) |
69 | 566 | .Case("sm_53", CudaArch::SM_53) |
70 | 566 | .Case("sm_60", CudaArch::SM_60) |
71 | 566 | .Case("sm_61", CudaArch::SM_61) |
72 | 566 | .Case("sm_62", CudaArch::SM_62) |
73 | 566 | .Case("sm_70", CudaArch::SM_70) |
74 | 566 | .Default(CudaArch::UNKNOWN); |
75 | 566 | } |
76 | | |
77 | 92 | const char *CudaVirtualArchToString(CudaVirtualArch A) { |
78 | 92 | switch (A) { |
79 | 0 | case CudaVirtualArch::UNKNOWN: |
80 | 0 | return "unknown"; |
81 | 51 | case CudaVirtualArch::COMPUTE_20: |
82 | 51 | return "compute_20"; |
83 | 4 | case CudaVirtualArch::COMPUTE_30: |
84 | 4 | return "compute_30"; |
85 | 2 | case CudaVirtualArch::COMPUTE_32: |
86 | 2 | return "compute_32"; |
87 | 15 | case CudaVirtualArch::COMPUTE_35: |
88 | 15 | return "compute_35"; |
89 | 2 | case CudaVirtualArch::COMPUTE_37: |
90 | 2 | return "compute_37"; |
91 | 3 | case CudaVirtualArch::COMPUTE_50: |
92 | 3 | return "compute_50"; |
93 | 2 | case CudaVirtualArch::COMPUTE_52: |
94 | 2 | return "compute_52"; |
95 | 1 | case CudaVirtualArch::COMPUTE_53: |
96 | 1 | return "compute_53"; |
97 | 8 | case CudaVirtualArch::COMPUTE_60: |
98 | 8 | return "compute_60"; |
99 | 2 | case CudaVirtualArch::COMPUTE_61: |
100 | 2 | return "compute_61"; |
101 | 1 | case CudaVirtualArch::COMPUTE_62: |
102 | 1 | return "compute_62"; |
103 | 1 | case CudaVirtualArch::COMPUTE_70: |
104 | 1 | return "compute_70"; |
105 | 0 | } |
106 | 0 | llvm_unreachable0 ("invalid enum"); |
107 | 0 | } |
108 | | |
109 | 0 | CudaVirtualArch StringToCudaVirtualArch(llvm::StringRef S) { |
110 | 0 | return llvm::StringSwitch<CudaVirtualArch>(S) |
111 | 0 | .Case("compute_20", CudaVirtualArch::COMPUTE_20) |
112 | 0 | .Case("compute_30", CudaVirtualArch::COMPUTE_30) |
113 | 0 | .Case("compute_32", CudaVirtualArch::COMPUTE_32) |
114 | 0 | .Case("compute_35", CudaVirtualArch::COMPUTE_35) |
115 | 0 | .Case("compute_37", CudaVirtualArch::COMPUTE_37) |
116 | 0 | .Case("compute_50", CudaVirtualArch::COMPUTE_50) |
117 | 0 | .Case("compute_52", CudaVirtualArch::COMPUTE_52) |
118 | 0 | .Case("compute_53", CudaVirtualArch::COMPUTE_53) |
119 | 0 | .Case("compute_60", CudaVirtualArch::COMPUTE_60) |
120 | 0 | .Case("compute_61", CudaVirtualArch::COMPUTE_61) |
121 | 0 | .Case("compute_62", CudaVirtualArch::COMPUTE_62) |
122 | 0 | .Case("compute_70", CudaVirtualArch::COMPUTE_70) |
123 | 0 | .Default(CudaVirtualArch::UNKNOWN); |
124 | 0 | } |
125 | | |
126 | 92 | CudaVirtualArch VirtualArchForCudaArch(CudaArch A) { |
127 | 92 | switch (A) { |
128 | 0 | case CudaArch::UNKNOWN: |
129 | 0 | return CudaVirtualArch::UNKNOWN; |
130 | 51 | case CudaArch::SM_20: |
131 | 51 | case CudaArch::SM_21: |
132 | 51 | return CudaVirtualArch::COMPUTE_20; |
133 | 4 | case CudaArch::SM_30: |
134 | 4 | return CudaVirtualArch::COMPUTE_30; |
135 | 2 | case CudaArch::SM_32: |
136 | 2 | return CudaVirtualArch::COMPUTE_32; |
137 | 15 | case CudaArch::SM_35: |
138 | 15 | return CudaVirtualArch::COMPUTE_35; |
139 | 2 | case CudaArch::SM_37: |
140 | 2 | return CudaVirtualArch::COMPUTE_37; |
141 | 3 | case CudaArch::SM_50: |
142 | 3 | return CudaVirtualArch::COMPUTE_50; |
143 | 2 | case CudaArch::SM_52: |
144 | 2 | return CudaVirtualArch::COMPUTE_52; |
145 | 1 | case CudaArch::SM_53: |
146 | 1 | return CudaVirtualArch::COMPUTE_53; |
147 | 8 | case CudaArch::SM_60: |
148 | 8 | return CudaVirtualArch::COMPUTE_60; |
149 | 2 | case CudaArch::SM_61: |
150 | 2 | return CudaVirtualArch::COMPUTE_61; |
151 | 1 | case CudaArch::SM_62: |
152 | 1 | return CudaVirtualArch::COMPUTE_62; |
153 | 1 | case CudaArch::SM_70: |
154 | 1 | return CudaVirtualArch::COMPUTE_70; |
155 | 0 | } |
156 | 0 | llvm_unreachable0 ("invalid enum"); |
157 | 0 | } |
158 | | |
159 | 46 | CudaVersion MinVersionForCudaArch(CudaArch A) { |
160 | 46 | switch (A) { |
161 | 0 | case CudaArch::UNKNOWN: |
162 | 0 | return CudaVersion::UNKNOWN; |
163 | 36 | case CudaArch::SM_20: |
164 | 36 | case CudaArch::SM_21: |
165 | 36 | case CudaArch::SM_30: |
166 | 36 | case CudaArch::SM_32: |
167 | 36 | case CudaArch::SM_35: |
168 | 36 | case CudaArch::SM_37: |
169 | 36 | case CudaArch::SM_50: |
170 | 36 | case CudaArch::SM_52: |
171 | 36 | case CudaArch::SM_53: |
172 | 36 | return CudaVersion::CUDA_70; |
173 | 10 | case CudaArch::SM_60: |
174 | 10 | case CudaArch::SM_61: |
175 | 10 | case CudaArch::SM_62: |
176 | 10 | return CudaVersion::CUDA_80; |
177 | 0 | case CudaArch::SM_70: |
178 | 0 | return CudaVersion::CUDA_90; |
179 | 0 | } |
180 | 0 | llvm_unreachable0 ("invalid enum"); |
181 | 0 | } |
182 | | |
183 | | } // namespace clang |