15#ifndef LLVM_IR_NVVMINTRINSICUTILS_H
16#define LLVM_IR_NVVMINTRINSICUTILS_H
22#include "llvm/IR/IntrinsicsNVPTX.h"
51 switch (IntrinsicID) {
52 case Intrinsic::nvvm_f2i_rm_ftz:
53 case Intrinsic::nvvm_f2i_rn_ftz:
54 case Intrinsic::nvvm_f2i_rp_ftz:
55 case Intrinsic::nvvm_f2i_rz_ftz:
57 case Intrinsic::nvvm_f2ui_rm_ftz:
58 case Intrinsic::nvvm_f2ui_rn_ftz:
59 case Intrinsic::nvvm_f2ui_rp_ftz:
60 case Intrinsic::nvvm_f2ui_rz_ftz:
62 case Intrinsic::nvvm_f2ll_rm_ftz:
63 case Intrinsic::nvvm_f2ll_rn_ftz:
64 case Intrinsic::nvvm_f2ll_rp_ftz:
65 case Intrinsic::nvvm_f2ll_rz_ftz:
67 case Intrinsic::nvvm_f2ull_rm_ftz:
68 case Intrinsic::nvvm_f2ull_rn_ftz:
69 case Intrinsic::nvvm_f2ull_rp_ftz:
70 case Intrinsic::nvvm_f2ull_rz_ftz:
73 case Intrinsic::nvvm_f2i_rm:
74 case Intrinsic::nvvm_f2i_rn:
75 case Intrinsic::nvvm_f2i_rp:
76 case Intrinsic::nvvm_f2i_rz:
78 case Intrinsic::nvvm_f2ui_rm:
79 case Intrinsic::nvvm_f2ui_rn:
80 case Intrinsic::nvvm_f2ui_rp:
81 case Intrinsic::nvvm_f2ui_rz:
83 case Intrinsic::nvvm_d2i_rm:
84 case Intrinsic::nvvm_d2i_rn:
85 case Intrinsic::nvvm_d2i_rp:
86 case Intrinsic::nvvm_d2i_rz:
88 case Intrinsic::nvvm_d2ui_rm:
89 case Intrinsic::nvvm_d2ui_rn:
90 case Intrinsic::nvvm_d2ui_rp:
91 case Intrinsic::nvvm_d2ui_rz:
93 case Intrinsic::nvvm_f2ll_rm:
94 case Intrinsic::nvvm_f2ll_rn:
95 case Intrinsic::nvvm_f2ll_rp:
96 case Intrinsic::nvvm_f2ll_rz:
98 case Intrinsic::nvvm_f2ull_rm:
99 case Intrinsic::nvvm_f2ull_rn:
100 case Intrinsic::nvvm_f2ull_rp:
101 case Intrinsic::nvvm_f2ull_rz:
103 case Intrinsic::nvvm_d2ll_rm:
104 case Intrinsic::nvvm_d2ll_rn:
105 case Intrinsic::nvvm_d2ll_rp:
106 case Intrinsic::nvvm_d2ll_rz:
108 case Intrinsic::nvvm_d2ull_rm:
109 case Intrinsic::nvvm_d2ull_rn:
110 case Intrinsic::nvvm_d2ull_rp:
111 case Intrinsic::nvvm_d2ull_rz:
118 switch (IntrinsicID) {
120 case Intrinsic::nvvm_f2i_rm:
121 case Intrinsic::nvvm_f2i_rm_ftz:
122 case Intrinsic::nvvm_f2i_rn:
123 case Intrinsic::nvvm_f2i_rn_ftz:
124 case Intrinsic::nvvm_f2i_rp:
125 case Intrinsic::nvvm_f2i_rp_ftz:
126 case Intrinsic::nvvm_f2i_rz:
127 case Intrinsic::nvvm_f2i_rz_ftz:
129 case Intrinsic::nvvm_d2i_rm:
130 case Intrinsic::nvvm_d2i_rn:
131 case Intrinsic::nvvm_d2i_rp:
132 case Intrinsic::nvvm_d2i_rz:
134 case Intrinsic::nvvm_f2ll_rm:
135 case Intrinsic::nvvm_f2ll_rm_ftz:
136 case Intrinsic::nvvm_f2ll_rn:
137 case Intrinsic::nvvm_f2ll_rn_ftz:
138 case Intrinsic::nvvm_f2ll_rp:
139 case Intrinsic::nvvm_f2ll_rp_ftz:
140 case Intrinsic::nvvm_f2ll_rz:
141 case Intrinsic::nvvm_f2ll_rz_ftz:
143 case Intrinsic::nvvm_d2ll_rm:
144 case Intrinsic::nvvm_d2ll_rn:
145 case Intrinsic::nvvm_d2ll_rp:
146 case Intrinsic::nvvm_d2ll_rz:
150 case Intrinsic::nvvm_f2ui_rm:
151 case Intrinsic::nvvm_f2ui_rm_ftz:
152 case Intrinsic::nvvm_f2ui_rn:
153 case Intrinsic::nvvm_f2ui_rn_ftz:
154 case Intrinsic::nvvm_f2ui_rp:
155 case Intrinsic::nvvm_f2ui_rp_ftz:
156 case Intrinsic::nvvm_f2ui_rz:
157 case Intrinsic::nvvm_f2ui_rz_ftz:
159 case Intrinsic::nvvm_d2ui_rm:
160 case Intrinsic::nvvm_d2ui_rn:
161 case Intrinsic::nvvm_d2ui_rp:
162 case Intrinsic::nvvm_d2ui_rz:
164 case Intrinsic::nvvm_f2ull_rm:
165 case Intrinsic::nvvm_f2ull_rm_ftz:
166 case Intrinsic::nvvm_f2ull_rn:
167 case Intrinsic::nvvm_f2ull_rn_ftz:
168 case Intrinsic::nvvm_f2ull_rp:
169 case Intrinsic::nvvm_f2ull_rp_ftz:
170 case Intrinsic::nvvm_f2ull_rz:
171 case Intrinsic::nvvm_f2ull_rz_ftz:
173 case Intrinsic::nvvm_d2ull_rm:
174 case Intrinsic::nvvm_d2ull_rn:
175 case Intrinsic::nvvm_d2ull_rp:
176 case Intrinsic::nvvm_d2ull_rz:
180 "Checking invalid f2i/d2i intrinsic for signed int conversion");
185 switch (IntrinsicID) {
187 case Intrinsic::nvvm_f2i_rm:
188 case Intrinsic::nvvm_f2ui_rm:
189 case Intrinsic::nvvm_f2i_rm_ftz:
190 case Intrinsic::nvvm_f2ui_rm_ftz:
191 case Intrinsic::nvvm_d2i_rm:
192 case Intrinsic::nvvm_d2ui_rm:
194 case Intrinsic::nvvm_f2ll_rm:
195 case Intrinsic::nvvm_f2ull_rm:
196 case Intrinsic::nvvm_f2ll_rm_ftz:
197 case Intrinsic::nvvm_f2ull_rm_ftz:
198 case Intrinsic::nvvm_d2ll_rm:
199 case Intrinsic::nvvm_d2ull_rm:
203 case Intrinsic::nvvm_f2i_rn:
204 case Intrinsic::nvvm_f2ui_rn:
205 case Intrinsic::nvvm_f2i_rn_ftz:
206 case Intrinsic::nvvm_f2ui_rn_ftz:
207 case Intrinsic::nvvm_d2i_rn:
208 case Intrinsic::nvvm_d2ui_rn:
210 case Intrinsic::nvvm_f2ll_rn:
211 case Intrinsic::nvvm_f2ull_rn:
212 case Intrinsic::nvvm_f2ll_rn_ftz:
213 case Intrinsic::nvvm_f2ull_rn_ftz:
214 case Intrinsic::nvvm_d2ll_rn:
215 case Intrinsic::nvvm_d2ull_rn:
219 case Intrinsic::nvvm_f2i_rp:
220 case Intrinsic::nvvm_f2ui_rp:
221 case Intrinsic::nvvm_f2i_rp_ftz:
222 case Intrinsic::nvvm_f2ui_rp_ftz:
223 case Intrinsic::nvvm_d2i_rp:
224 case Intrinsic::nvvm_d2ui_rp:
226 case Intrinsic::nvvm_f2ll_rp:
227 case Intrinsic::nvvm_f2ull_rp:
228 case Intrinsic::nvvm_f2ll_rp_ftz:
229 case Intrinsic::nvvm_f2ull_rp_ftz:
230 case Intrinsic::nvvm_d2ll_rp:
231 case Intrinsic::nvvm_d2ull_rp:
235 case Intrinsic::nvvm_f2i_rz:
236 case Intrinsic::nvvm_f2ui_rz:
237 case Intrinsic::nvvm_f2i_rz_ftz:
238 case Intrinsic::nvvm_f2ui_rz_ftz:
239 case Intrinsic::nvvm_d2i_rz:
240 case Intrinsic::nvvm_d2ui_rz:
242 case Intrinsic::nvvm_f2ll_rz:
243 case Intrinsic::nvvm_f2ull_rz:
244 case Intrinsic::nvvm_f2ll_rz_ftz:
245 case Intrinsic::nvvm_f2ull_rz_ftz:
246 case Intrinsic::nvvm_d2ll_rz:
247 case Intrinsic::nvvm_d2ull_rz:
254 switch (IntrinsicID) {
255 case Intrinsic::nvvm_fmax_ftz_f:
256 case Intrinsic::nvvm_fmax_ftz_nan_f:
257 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
258 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
260 case Intrinsic::nvvm_fmin_ftz_f:
261 case Intrinsic::nvvm_fmin_ftz_nan_f:
262 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
263 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
266 case Intrinsic::nvvm_fmax_d:
267 case Intrinsic::nvvm_fmax_f:
268 case Intrinsic::nvvm_fmax_nan_f:
269 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
270 case Intrinsic::nvvm_fmax_xorsign_abs_f:
272 case Intrinsic::nvvm_fmin_d:
273 case Intrinsic::nvvm_fmin_f:
274 case Intrinsic::nvvm_fmin_nan_f:
275 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
276 case Intrinsic::nvvm_fmin_xorsign_abs_f:
283 switch (IntrinsicID) {
284 case Intrinsic::nvvm_fmax_ftz_nan_f:
285 case Intrinsic::nvvm_fmax_nan_f:
286 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
287 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
289 case Intrinsic::nvvm_fmin_ftz_nan_f:
290 case Intrinsic::nvvm_fmin_nan_f:
291 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
292 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
295 case Intrinsic::nvvm_fmax_d:
296 case Intrinsic::nvvm_fmax_f:
297 case Intrinsic::nvvm_fmax_ftz_f:
298 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
299 case Intrinsic::nvvm_fmax_xorsign_abs_f:
301 case Intrinsic::nvvm_fmin_d:
302 case Intrinsic::nvvm_fmin_f:
303 case Intrinsic::nvvm_fmin_ftz_f:
304 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
305 case Intrinsic::nvvm_fmin_xorsign_abs_f:
312 switch (IntrinsicID) {
313 case Intrinsic::nvvm_fmax_ftz_nan_xorsign_abs_f:
314 case Intrinsic::nvvm_fmax_ftz_xorsign_abs_f:
315 case Intrinsic::nvvm_fmax_nan_xorsign_abs_f:
316 case Intrinsic::nvvm_fmax_xorsign_abs_f:
318 case Intrinsic::nvvm_fmin_ftz_nan_xorsign_abs_f:
319 case Intrinsic::nvvm_fmin_ftz_xorsign_abs_f:
320 case Intrinsic::nvvm_fmin_nan_xorsign_abs_f:
321 case Intrinsic::nvvm_fmin_xorsign_abs_f:
324 case Intrinsic::nvvm_fmax_d:
325 case Intrinsic::nvvm_fmax_f:
326 case Intrinsic::nvvm_fmax_ftz_f:
327 case Intrinsic::nvvm_fmax_ftz_nan_f:
328 case Intrinsic::nvvm_fmax_nan_f:
330 case Intrinsic::nvvm_fmin_d:
331 case Intrinsic::nvvm_fmin_f:
332 case Intrinsic::nvvm_fmin_ftz_f:
333 case Intrinsic::nvvm_fmin_ftz_nan_f:
334 case Intrinsic::nvvm_fmin_nan_f:
337 llvm_unreachable(
"Checking XorSignAbs flag for invalid fmin/fmax intrinsic");
341 switch (IntrinsicID) {
342 case Intrinsic::nvvm_ceil_ftz_f:
343 case Intrinsic::nvvm_fabs_ftz:
344 case Intrinsic::nvvm_floor_ftz_f:
345 case Intrinsic::nvvm_round_ftz_f:
346 case Intrinsic::nvvm_saturate_ftz_f:
347 case Intrinsic::nvvm_sqrt_rn_ftz_f:
349 case Intrinsic::nvvm_ceil_f:
350 case Intrinsic::nvvm_ceil_d:
351 case Intrinsic::nvvm_fabs:
352 case Intrinsic::nvvm_floor_f:
353 case Intrinsic::nvvm_floor_d:
354 case Intrinsic::nvvm_round_f:
355 case Intrinsic::nvvm_round_d:
356 case Intrinsic::nvvm_saturate_d:
357 case Intrinsic::nvvm_saturate_f:
358 case Intrinsic::nvvm_sqrt_f:
359 case Intrinsic::nvvm_sqrt_rn_d:
360 case Intrinsic::nvvm_sqrt_rn_f:
367 switch (IntrinsicID) {
368 case Intrinsic::nvvm_rcp_rm_ftz_f:
369 case Intrinsic::nvvm_rcp_rn_ftz_f:
370 case Intrinsic::nvvm_rcp_rp_ftz_f:
371 case Intrinsic::nvvm_rcp_rz_ftz_f:
373 case Intrinsic::nvvm_rcp_rm_d:
374 case Intrinsic::nvvm_rcp_rm_f:
375 case Intrinsic::nvvm_rcp_rn_d:
376 case Intrinsic::nvvm_rcp_rn_f:
377 case Intrinsic::nvvm_rcp_rp_d:
378 case Intrinsic::nvvm_rcp_rp_f:
379 case Intrinsic::nvvm_rcp_rz_d:
380 case Intrinsic::nvvm_rcp_rz_f:
387 switch (IntrinsicID) {
388 case Intrinsic::nvvm_rcp_rm_f:
389 case Intrinsic::nvvm_rcp_rm_d:
390 case Intrinsic::nvvm_rcp_rm_ftz_f:
393 case Intrinsic::nvvm_rcp_rn_f:
394 case Intrinsic::nvvm_rcp_rn_d:
395 case Intrinsic::nvvm_rcp_rn_ftz_f:
398 case Intrinsic::nvvm_rcp_rp_f:
399 case Intrinsic::nvvm_rcp_rp_d:
400 case Intrinsic::nvvm_rcp_rp_ftz_f:
403 case Intrinsic::nvvm_rcp_rz_f:
404 case Intrinsic::nvvm_rcp_rz_d:
405 case Intrinsic::nvvm_rcp_rz_ftz_f:
418 switch (IntrinsicID) {
419 case Intrinsic::nvvm_add_rm_ftz_f:
420 case Intrinsic::nvvm_add_rn_ftz_f:
421 case Intrinsic::nvvm_add_rp_ftz_f:
422 case Intrinsic::nvvm_add_rz_ftz_f:
425 case Intrinsic::nvvm_add_rm_f:
426 case Intrinsic::nvvm_add_rn_f:
427 case Intrinsic::nvvm_add_rp_f:
428 case Intrinsic::nvvm_add_rz_f:
429 case Intrinsic::nvvm_add_rm_d:
430 case Intrinsic::nvvm_add_rn_d:
431 case Intrinsic::nvvm_add_rp_d:
432 case Intrinsic::nvvm_add_rz_d:
439 switch (IntrinsicID) {
440 case Intrinsic::nvvm_add_rm_f:
441 case Intrinsic::nvvm_add_rm_d:
442 case Intrinsic::nvvm_add_rm_ftz_f:
444 case Intrinsic::nvvm_add_rn_f:
445 case Intrinsic::nvvm_add_rn_d:
446 case Intrinsic::nvvm_add_rn_ftz_f:
448 case Intrinsic::nvvm_add_rp_f:
449 case Intrinsic::nvvm_add_rp_d:
450 case Intrinsic::nvvm_add_rp_ftz_f:
452 case Intrinsic::nvvm_add_rz_f:
453 case Intrinsic::nvvm_add_rz_d:
454 case Intrinsic::nvvm_add_rz_ftz_f:
461 switch (IntrinsicID) {
462 case Intrinsic::nvvm_mul_rm_ftz_f:
463 case Intrinsic::nvvm_mul_rn_ftz_f:
464 case Intrinsic::nvvm_mul_rp_ftz_f:
465 case Intrinsic::nvvm_mul_rz_ftz_f:
468 case Intrinsic::nvvm_mul_rm_f:
469 case Intrinsic::nvvm_mul_rn_f:
470 case Intrinsic::nvvm_mul_rp_f:
471 case Intrinsic::nvvm_mul_rz_f:
472 case Intrinsic::nvvm_mul_rm_d:
473 case Intrinsic::nvvm_mul_rn_d:
474 case Intrinsic::nvvm_mul_rp_d:
475 case Intrinsic::nvvm_mul_rz_d:
482 switch (IntrinsicID) {
483 case Intrinsic::nvvm_mul_rm_f:
484 case Intrinsic::nvvm_mul_rm_d:
485 case Intrinsic::nvvm_mul_rm_ftz_f:
487 case Intrinsic::nvvm_mul_rn_f:
488 case Intrinsic::nvvm_mul_rn_d:
489 case Intrinsic::nvvm_mul_rn_ftz_f:
491 case Intrinsic::nvvm_mul_rp_f:
492 case Intrinsic::nvvm_mul_rp_d:
493 case Intrinsic::nvvm_mul_rp_ftz_f:
495 case Intrinsic::nvvm_mul_rz_f:
496 case Intrinsic::nvvm_mul_rz_d:
497 case Intrinsic::nvvm_mul_rz_ftz_f:
504 switch (IntrinsicID) {
505 case Intrinsic::nvvm_div_rm_ftz_f:
506 case Intrinsic::nvvm_div_rn_ftz_f:
507 case Intrinsic::nvvm_div_rp_ftz_f:
508 case Intrinsic::nvvm_div_rz_ftz_f:
511 case Intrinsic::nvvm_div_rm_f:
512 case Intrinsic::nvvm_div_rn_f:
513 case Intrinsic::nvvm_div_rp_f:
514 case Intrinsic::nvvm_div_rz_f:
515 case Intrinsic::nvvm_div_rm_d:
516 case Intrinsic::nvvm_div_rn_d:
517 case Intrinsic::nvvm_div_rp_d:
518 case Intrinsic::nvvm_div_rz_d:
525 switch (IntrinsicID) {
526 case Intrinsic::nvvm_div_rm_f:
527 case Intrinsic::nvvm_div_rm_d:
528 case Intrinsic::nvvm_div_rm_ftz_f:
530 case Intrinsic::nvvm_div_rn_f:
531 case Intrinsic::nvvm_div_rn_d:
532 case Intrinsic::nvvm_div_rn_ftz_f:
534 case Intrinsic::nvvm_div_rp_f:
535 case Intrinsic::nvvm_div_rp_d:
536 case Intrinsic::nvvm_div_rp_ftz_f:
538 case Intrinsic::nvvm_div_rz_f:
539 case Intrinsic::nvvm_div_rz_d:
540 case Intrinsic::nvvm_div_rz_ftz_f:
547 switch (IntrinsicID) {
548 case Intrinsic::nvvm_fma_rm_ftz_f:
549 case Intrinsic::nvvm_fma_rn_ftz_f:
550 case Intrinsic::nvvm_fma_rp_ftz_f:
551 case Intrinsic::nvvm_fma_rz_ftz_f:
554 case Intrinsic::nvvm_fma_rm_f:
555 case Intrinsic::nvvm_fma_rn_f:
556 case Intrinsic::nvvm_fma_rp_f:
557 case Intrinsic::nvvm_fma_rz_f:
558 case Intrinsic::nvvm_fma_rm_d:
559 case Intrinsic::nvvm_fma_rn_d:
560 case Intrinsic::nvvm_fma_rp_d:
561 case Intrinsic::nvvm_fma_rz_d:
568 switch (IntrinsicID) {
569 case Intrinsic::nvvm_fma_rm_f:
570 case Intrinsic::nvvm_fma_rm_d:
571 case Intrinsic::nvvm_fma_rm_ftz_f:
573 case Intrinsic::nvvm_fma_rn_f:
574 case Intrinsic::nvvm_fma_rn_d:
575 case Intrinsic::nvvm_fma_rn_ftz_f:
577 case Intrinsic::nvvm_fma_rp_f:
578 case Intrinsic::nvvm_fma_rp_d:
579 case Intrinsic::nvvm_fma_rp_ftz_f:
581 case Intrinsic::nvvm_fma_rz_f:
582 case Intrinsic::nvvm_fma_rz_d:
583 case Intrinsic::nvvm_fma_rz_ftz_f:
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.
APFloat::roundingMode GetFMARoundingMode(Intrinsic::ID IntrinsicID)
DenormalMode GetNVVMDenormMode(bool ShouldFTZ)
APFloat::roundingMode GetFDivRoundingMode(Intrinsic::ID IntrinsicID)
bool FPToIntegerIntrinsicResultIsSigned(Intrinsic::ID IntrinsicID)
APFloat::roundingMode GetFPToIntegerRoundingMode(Intrinsic::ID IntrinsicID)
bool RCPShouldFTZ(Intrinsic::ID IntrinsicID)
bool FPToIntegerIntrinsicShouldFTZ(Intrinsic::ID IntrinsicID)
bool FDivShouldFTZ(Intrinsic::ID IntrinsicID)
bool FAddShouldFTZ(Intrinsic::ID IntrinsicID)
bool FMinFMaxIsXorSignAbs(Intrinsic::ID IntrinsicID)
APFloat::roundingMode GetFMulRoundingMode(Intrinsic::ID IntrinsicID)
bool UnaryMathIntrinsicShouldFTZ(Intrinsic::ID IntrinsicID)
bool FMinFMaxShouldFTZ(Intrinsic::ID IntrinsicID)
APFloat::roundingMode GetFAddRoundingMode(Intrinsic::ID IntrinsicID)
bool FMAShouldFTZ(Intrinsic::ID IntrinsicID)
bool FMulShouldFTZ(Intrinsic::ID IntrinsicID)
APFloat::roundingMode GetRCPRoundingMode(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
Represent subnormal handling kind for floating point instruction inputs and outputs.
static constexpr DenormalMode getPreserveSign()
static constexpr DenormalMode getIEEE()