15#ifndef LLVM_IR_NVVMINTRINSICUTILS_H
16#define LLVM_IR_NVVMINTRINSICUTILS_H
22#include "llvm/IR/IntrinsicsNVPTX.h"
42 switch (IntrinsicID) {
43 case Intrinsic::nvvm_f2i_rm_ftz:
44 case Intrinsic::nvvm_f2i_rn_ftz:
45 case Intrinsic::nvvm_f2i_rp_ftz:
46 case Intrinsic::nvvm_f2i_rz_ftz:
48 case Intrinsic::nvvm_f2ui_rm_ftz:
49 case Intrinsic::nvvm_f2ui_rn_ftz:
50 case Intrinsic::nvvm_f2ui_rp_ftz:
51 case Intrinsic::nvvm_f2ui_rz_ftz:
53 case Intrinsic::nvvm_f2ll_rm_ftz:
54 case Intrinsic::nvvm_f2ll_rn_ftz:
55 case Intrinsic::nvvm_f2ll_rp_ftz:
56 case Intrinsic::nvvm_f2ll_rz_ftz:
58 case Intrinsic::nvvm_f2ull_rm_ftz:
59 case Intrinsic::nvvm_f2ull_rn_ftz:
60 case Intrinsic::nvvm_f2ull_rp_ftz:
61 case Intrinsic::nvvm_f2ull_rz_ftz:
64 case Intrinsic::nvvm_f2i_rm:
65 case Intrinsic::nvvm_f2i_rn:
66 case Intrinsic::nvvm_f2i_rp:
67 case Intrinsic::nvvm_f2i_rz:
69 case Intrinsic::nvvm_f2ui_rm:
70 case Intrinsic::nvvm_f2ui_rn:
71 case Intrinsic::nvvm_f2ui_rp:
72 case Intrinsic::nvvm_f2ui_rz:
74 case Intrinsic::nvvm_d2i_rm:
75 case Intrinsic::nvvm_d2i_rn:
76 case Intrinsic::nvvm_d2i_rp:
77 case Intrinsic::nvvm_d2i_rz:
79 case Intrinsic::nvvm_d2ui_rm:
80 case Intrinsic::nvvm_d2ui_rn:
81 case Intrinsic::nvvm_d2ui_rp:
82 case Intrinsic::nvvm_d2ui_rz:
84 case Intrinsic::nvvm_f2ll_rm:
85 case Intrinsic::nvvm_f2ll_rn:
86 case Intrinsic::nvvm_f2ll_rp:
87 case Intrinsic::nvvm_f2ll_rz:
89 case Intrinsic::nvvm_f2ull_rm:
90 case Intrinsic::nvvm_f2ull_rn:
91 case Intrinsic::nvvm_f2ull_rp:
92 case Intrinsic::nvvm_f2ull_rz:
94 case Intrinsic::nvvm_d2ll_rm:
95 case Intrinsic::nvvm_d2ll_rn:
96 case Intrinsic::nvvm_d2ll_rp:
97 case Intrinsic::nvvm_d2ll_rz:
99 case Intrinsic::nvvm_d2ull_rm:
100 case Intrinsic::nvvm_d2ull_rn:
101 case Intrinsic::nvvm_d2ull_rp:
102 case Intrinsic::nvvm_d2ull_rz:
110 switch (IntrinsicID) {
112 case Intrinsic::nvvm_f2i_rm:
113 case Intrinsic::nvvm_f2i_rm_ftz:
114 case Intrinsic::nvvm_f2i_rn:
115 case Intrinsic::nvvm_f2i_rn_ftz:
116 case Intrinsic::nvvm_f2i_rp:
117 case Intrinsic::nvvm_f2i_rp_ftz:
118 case Intrinsic::nvvm_f2i_rz:
119 case Intrinsic::nvvm_f2i_rz_ftz:
121 case Intrinsic::nvvm_d2i_rm:
122 case Intrinsic::nvvm_d2i_rn:
123 case Intrinsic::nvvm_d2i_rp:
124 case Intrinsic::nvvm_d2i_rz:
126 case Intrinsic::nvvm_f2ll_rm:
127 case Intrinsic::nvvm_f2ll_rm_ftz:
128 case Intrinsic::nvvm_f2ll_rn:
129 case Intrinsic::nvvm_f2ll_rn_ftz:
130 case Intrinsic::nvvm_f2ll_rp:
131 case Intrinsic::nvvm_f2ll_rp_ftz:
132 case Intrinsic::nvvm_f2ll_rz:
133 case Intrinsic::nvvm_f2ll_rz_ftz:
135 case Intrinsic::nvvm_d2ll_rm:
136 case Intrinsic::nvvm_d2ll_rn:
137 case Intrinsic::nvvm_d2ll_rp:
138 case Intrinsic::nvvm_d2ll_rz:
142 case Intrinsic::nvvm_f2ui_rm:
143 case Intrinsic::nvvm_f2ui_rm_ftz:
144 case Intrinsic::nvvm_f2ui_rn:
145 case Intrinsic::nvvm_f2ui_rn_ftz:
146 case Intrinsic::nvvm_f2ui_rp:
147 case Intrinsic::nvvm_f2ui_rp_ftz:
148 case Intrinsic::nvvm_f2ui_rz:
149 case Intrinsic::nvvm_f2ui_rz_ftz:
151 case Intrinsic::nvvm_d2ui_rm:
152 case Intrinsic::nvvm_d2ui_rn:
153 case Intrinsic::nvvm_d2ui_rp:
154 case Intrinsic::nvvm_d2ui_rz:
156 case Intrinsic::nvvm_f2ull_rm:
157 case Intrinsic::nvvm_f2ull_rm_ftz:
158 case Intrinsic::nvvm_f2ull_rn:
159 case Intrinsic::nvvm_f2ull_rn_ftz:
160 case Intrinsic::nvvm_f2ull_rp:
161 case Intrinsic::nvvm_f2ull_rp_ftz:
162 case Intrinsic::nvvm_f2ull_rz:
163 case Intrinsic::nvvm_f2ull_rz_ftz:
165 case Intrinsic::nvvm_d2ull_rm:
166 case Intrinsic::nvvm_d2ull_rn:
167 case Intrinsic::nvvm_d2ull_rp:
168 case Intrinsic::nvvm_d2ull_rz:
172 "Checking invalid f2i/d2i intrinsic for signed int conversion");
178 switch (IntrinsicID) {
180 case Intrinsic::nvvm_f2i_rm:
181 case Intrinsic::nvvm_f2ui_rm:
182 case Intrinsic::nvvm_f2i_rm_ftz:
183 case Intrinsic::nvvm_f2ui_rm_ftz:
184 case Intrinsic::nvvm_d2i_rm:
185 case Intrinsic::nvvm_d2ui_rm:
187 case Intrinsic::nvvm_f2ll_rm:
188 case Intrinsic::nvvm_f2ull_rm:
189 case Intrinsic::nvvm_f2ll_rm_ftz:
190 case Intrinsic::nvvm_f2ull_rm_ftz:
191 case Intrinsic::nvvm_d2ll_rm:
192 case Intrinsic::nvvm_d2ull_rm:
196 case Intrinsic::nvvm_f2i_rn:
197 case Intrinsic::nvvm_f2ui_rn:
198 case Intrinsic::nvvm_f2i_rn_ftz:
199 case Intrinsic::nvvm_f2ui_rn_ftz:
200 case Intrinsic::nvvm_d2i_rn:
201 case Intrinsic::nvvm_d2ui_rn:
203 case Intrinsic::nvvm_f2ll_rn:
204 case Intrinsic::nvvm_f2ull_rn:
205 case Intrinsic::nvvm_f2ll_rn_ftz:
206 case Intrinsic::nvvm_f2ull_rn_ftz:
207 case Intrinsic::nvvm_d2ll_rn:
208 case Intrinsic::nvvm_d2ull_rn:
212 case Intrinsic::nvvm_f2i_rp:
213 case Intrinsic::nvvm_f2ui_rp:
214 case Intrinsic::nvvm_f2i_rp_ftz:
215 case Intrinsic::nvvm_f2ui_rp_ftz:
216 case Intrinsic::nvvm_d2i_rp:
217 case Intrinsic::nvvm_d2ui_rp:
219 case Intrinsic::nvvm_f2ll_rp:
220 case Intrinsic::nvvm_f2ull_rp:
221 case Intrinsic::nvvm_f2ll_rp_ftz:
222 case Intrinsic::nvvm_f2ull_rp_ftz:
223 case Intrinsic::nvvm_d2ll_rp:
224 case Intrinsic::nvvm_d2ull_rp:
228 case Intrinsic::nvvm_f2i_rz:
229 case Intrinsic::nvvm_f2ui_rz:
230 case Intrinsic::nvvm_f2i_rz_ftz:
231 case Intrinsic::nvvm_f2ui_rz_ftz:
232 case Intrinsic::nvvm_d2i_rz:
233 case Intrinsic::nvvm_d2ui_rz:
235 case Intrinsic::nvvm_f2ll_rz:
236 case Intrinsic::nvvm_f2ull_rz:
237 case Intrinsic::nvvm_f2ll_rz_ftz:
238 case Intrinsic::nvvm_f2ull_rz_ftz:
239 case Intrinsic::nvvm_d2ll_rz:
240 case Intrinsic::nvvm_d2ull_rz:
244 return APFloat::roundingMode::Invalid;
248 switch (IntrinsicID) {
249 case Intrinsic::nvvm_fmax_ftz_f:
250 case Intrinsic::nvvm_fmax_ftz_nan_f:
251 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
252 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
254 case Intrinsic::nvvm_fmin_ftz_f:
255 case Intrinsic::nvvm_fmin_ftz_nan_f:
256 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
257 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
260 case Intrinsic::nvvm_fmax_d:
261 case Intrinsic::nvvm_fmax_f:
262 case Intrinsic::nvvm_fmax_nan_f:
263 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
264 case Intrinsic::nvvm_fmax_xorsign_abs_f:
266 case Intrinsic::nvvm_fmin_d:
267 case Intrinsic::nvvm_fmin_f:
268 case Intrinsic::nvvm_fmin_nan_f:
269 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
270 case Intrinsic::nvvm_fmin_xorsign_abs_f:
278 switch (IntrinsicID) {
279 case Intrinsic::nvvm_fmax_ftz_nan_f:
280 case Intrinsic::nvvm_fmax_nan_f:
281 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
282 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
284 case Intrinsic::nvvm_fmin_ftz_nan_f:
285 case Intrinsic::nvvm_fmin_nan_f:
286 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
287 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
290 case Intrinsic::nvvm_fmax_d:
291 case Intrinsic::nvvm_fmax_f:
292 case Intrinsic::nvvm_fmax_ftz_f:
293 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
294 case Intrinsic::nvvm_fmax_xorsign_abs_f:
296 case Intrinsic::nvvm_fmin_d:
297 case Intrinsic::nvvm_fmin_f:
298 case Intrinsic::nvvm_fmin_ftz_f:
299 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
300 case Intrinsic::nvvm_fmin_xorsign_abs_f:
308 switch (IntrinsicID) {
309 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
310 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
311 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
312 case Intrinsic::nvvm_fmax_xorsign_abs_f:
314 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
315 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
316 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
317 case Intrinsic::nvvm_fmin_xorsign_abs_f:
320 case Intrinsic::nvvm_fmax_d:
321 case Intrinsic::nvvm_fmax_f:
322 case Intrinsic::nvvm_fmax_ftz_f:
323 case Intrinsic::nvvm_fmax_ftz_nan_f:
324 case Intrinsic::nvvm_fmax_nan_f:
326 case Intrinsic::nvvm_fmin_d:
327 case Intrinsic::nvvm_fmin_f:
328 case Intrinsic::nvvm_fmin_ftz_f:
329 case Intrinsic::nvvm_fmin_ftz_nan_f:
330 case Intrinsic::nvvm_fmin_nan_f:
333 llvm_unreachable(
"Checking XorSignAbs flag for invalid fmin/fmax intrinsic");
This file declares a class to represent arbitrary precision floating point values and provide a varie...
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
bool FPToIntegerIntrinsicResultIsSigned(Intrinsic::ID IntrinsicID)
APFloat::roundingMode GetFPToIntegerRoundingMode(Intrinsic::ID IntrinsicID)
bool FPToIntegerIntrinsicShouldFTZ(Intrinsic::ID IntrinsicID)
bool FMinFMaxIsXorSignAbs(Intrinsic::ID IntrinsicID)
bool FMinFMaxShouldFTZ(Intrinsic::ID IntrinsicID)
bool FMinFMaxPropagatesNaNs(Intrinsic::ID IntrinsicID)
This is an optimization pass for GlobalISel generic memory operations.
RoundingMode
Rounding mode.
static constexpr roundingMode rmTowardNegative
static constexpr roundingMode rmNearestTiesToEven
static constexpr roundingMode rmTowardZero
static constexpr roundingMode rmTowardPositive