@@ -256,19 +256,54 @@ define double @select_fcmp_ole_zero(double %x) {
256
256
; CHECK-LABEL: @select_fcmp_ole_zero(
257
257
; CHECK-NEXT: [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
258
258
; CHECK-NEXT: ret double [[FABS]]
259
+ ;
260
+ %lezero = fcmp nnan ole double %x , 0 .0
261
+ %negx = fsub double 0 .0 , %x
262
+ %fabs = select i1 %lezero , double %negx , double %x
263
+ ret double %fabs
264
+ }
265
+
266
+ define double @select_fcmp_ole_zero_no_nnan (double %x ) {
267
+ ; CHECK-LABEL: @select_fcmp_ole_zero_no_nnan(
268
+ ; CHECK-NEXT: [[LEZERO:%.*]] = fcmp ole double [[X:%.*]], 0.000000e+00
269
+ ; CHECK-NEXT: [[NEGX:%.*]] = fsub double 0.000000e+00, [[X]]
270
+ ; CHECK-NEXT: [[FABS:%.*]] = select i1 [[LEZERO]], double [[NEGX]], double [[X]]
271
+ ; CHECK-NEXT: ret double [[FABS]]
259
272
;
260
273
%lezero = fcmp ole double %x , 0 .0
261
274
%negx = fsub double 0 .0 , %x
262
275
%fabs = select i1 %lezero , double %negx , double %x
263
276
ret double %fabs
264
277
}
265
278
279
+ define double @select_fcmp_ole_zero_no_nnan_input_nofpclass_nan (double nofpclass(nan) %x ) {
280
+ ; CHECK-LABEL: @select_fcmp_ole_zero_no_nnan_input_nofpclass_nan(
281
+ ; CHECK-NEXT: [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
282
+ ; CHECK-NEXT: ret double [[FABS]]
283
+ ;
284
+ %lezero = fcmp ole double %x , 0 .0
285
+ %negx = fsub double 0 .0 , %x
286
+ %fabs = select i1 %lezero , double %negx , double %x
287
+ ret double %fabs
288
+ }
289
+
290
+ define double @select_fcmp_ole_zero_select_nnan (double %x ) {
291
+ ; CHECK-LABEL: @select_fcmp_ole_zero_select_nnan(
292
+ ; CHECK-NEXT: [[FABS:%.*]] = call nnan double @llvm.fabs.f64(double [[X:%.*]])
293
+ ; CHECK-NEXT: ret double [[FABS]]
294
+ ;
295
+ %lezero = fcmp ole double %x , 0 .0
296
+ %negx = fsub double 0 .0 , %x
297
+ %fabs = select nnan i1 %lezero , double %negx , double %x
298
+ ret double %fabs
299
+ }
300
+
266
301
define double @select_fcmp_nnan_ole_zero (double %x ) {
267
302
; CHECK-LABEL: @select_fcmp_nnan_ole_zero(
268
303
; CHECK-NEXT: [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
269
304
; CHECK-NEXT: ret double [[FABS]]
270
305
;
271
- %lezero = fcmp ole double %x , 0 .0
306
+ %lezero = fcmp nnan ole double %x , 0 .0
272
307
%negx = fsub nnan double 0 .0 , %x
273
308
%fabs = select i1 %lezero , double %negx , double %x
274
309
ret double %fabs
@@ -279,7 +314,7 @@ define double @select_nnan_fcmp_nnan_ole_zero(double %x) {
279
314
; CHECK-NEXT: [[FABS:%.*]] = call nnan double @llvm.fabs.f64(double [[X:%.*]])
280
315
; CHECK-NEXT: ret double [[FABS]]
281
316
;
282
- %lezero = fcmp ole double %x , 0 .0
317
+ %lezero = fcmp nnan ole double %x , 0 .0
283
318
%negx = fsub nnan double 0 .0 , %x
284
319
%fabs = select nnan i1 %lezero , double %negx , double %x
285
320
ret double %fabs
@@ -292,7 +327,7 @@ define double @select_fcmp_nnan_ule_zero(double %x) {
292
327
; CHECK-NEXT: [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X:%.*]])
293
328
; CHECK-NEXT: ret double [[FABS]]
294
329
;
295
- %lezero = fcmp ule double %x , 0 .0
330
+ %lezero = fcmp nnan ule double %x , 0 .0
296
331
%negx = fsub nnan double 0 .0 , %x
297
332
%fabs = select i1 %lezero , double %negx , double %x
298
333
ret double %fabs
@@ -320,7 +355,7 @@ define <2 x float> @select_fcmp_nnan_ole_negzero(<2 x float> %x) {
320
355
; CHECK-NEXT: [[FABS:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[X:%.*]])
321
356
; CHECK-NEXT: ret <2 x float> [[FABS]]
322
357
;
323
- %lezero = fcmp ole <2 x float > %x , <float -0 .0 , float -0 .0 >
358
+ %lezero = fcmp nnan ole <2 x float > %x , <float -0 .0 , float -0 .0 >
324
359
%negx = fsub nnan <2 x float > <float 0 .0 , float poison>, %x
325
360
%fabs = select <2 x i1 > %lezero , <2 x float > %negx , <2 x float > %x
326
361
ret <2 x float > %fabs
@@ -331,7 +366,7 @@ define <2 x float> @select_nnan_fcmp_nnan_ole_negzero(<2 x float> %x) {
331
366
; CHECK-NEXT: [[FABS:%.*]] = call nnan <2 x float> @llvm.fabs.v2f32(<2 x float> [[X:%.*]])
332
367
; CHECK-NEXT: ret <2 x float> [[FABS]]
333
368
;
334
- %lezero = fcmp ole <2 x float > %x , <float -0 .0 , float -0 .0 >
369
+ %lezero = fcmp nnan ole <2 x float > %x , <float -0 .0 , float -0 .0 >
335
370
%negx = fsub nnan <2 x float > <float 0 .0 , float poison>, %x
336
371
%fabs = select nnan <2 x i1 > %lezero , <2 x float > %negx , <2 x float > %x
337
372
ret <2 x float > %fabs
@@ -344,7 +379,7 @@ define fp128 @select_fcmp_ogt_zero(fp128 %x) {
344
379
; CHECK-NEXT: [[FABS:%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X:%.*]])
345
380
; CHECK-NEXT: ret fp128 [[FABS]]
346
381
;
347
- %gtzero = fcmp ogt fp128 %x , zeroinitializer
382
+ %gtzero = fcmp nnan ogt fp128 %x , zeroinitializer
348
383
%negx = fsub fp128 zeroinitializer , %x
349
384
%fabs = select i1 %gtzero , fp128 %x , fp128 %negx
350
385
ret fp128 %fabs
@@ -382,7 +417,7 @@ define fp128 @select_fcmp_nnan_ogt_zero(fp128 %x) {
382
417
; CHECK-NEXT: [[FABS:%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X:%.*]])
383
418
; CHECK-NEXT: ret fp128 [[FABS]]
384
419
;
385
- %gtzero = fcmp ogt fp128 %x , zeroinitializer
420
+ %gtzero = fcmp nnan ogt fp128 %x , zeroinitializer
386
421
%negx = fsub nnan fp128 zeroinitializer , %x
387
422
%fabs = select i1 %gtzero , fp128 %x , fp128 %negx
388
423
ret fp128 %fabs
@@ -393,7 +428,7 @@ define fp128 @select_nnan_fcmp_nnan_ogt_zero(fp128 %x) {
393
428
; CHECK-NEXT: [[FABS:%.*]] = call nnan fp128 @llvm.fabs.f128(fp128 [[X:%.*]])
394
429
; CHECK-NEXT: ret fp128 [[FABS]]
395
430
;
396
- %gtzero = fcmp ogt fp128 %x , zeroinitializer
431
+ %gtzero = fcmp nnan ogt fp128 %x , zeroinitializer
397
432
%negx = fsub nnan fp128 zeroinitializer , %x
398
433
%fabs = select nnan i1 %gtzero , fp128 %x , fp128 %negx
399
434
ret fp128 %fabs
@@ -406,7 +441,7 @@ define half @select_fcmp_nnan_ogt_negzero(half %x) {
406
441
; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
407
442
; CHECK-NEXT: ret half [[FABS]]
408
443
;
409
- %gtzero = fcmp ogt half %x , -0 .0
444
+ %gtzero = fcmp nnan ogt half %x , -0 .0
410
445
%negx = fsub nnan half 0 .0 , %x
411
446
%fabs = select i1 %gtzero , half %x , half %negx
412
447
ret half %fabs
@@ -417,7 +452,7 @@ define half @select_nnan_fcmp_nnan_ogt_negzero(half %x) {
417
452
; CHECK-NEXT: [[FABS:%.*]] = call nnan half @llvm.fabs.f16(half [[X:%.*]])
418
453
; CHECK-NEXT: ret half [[FABS]]
419
454
;
420
- %gtzero = fcmp ogt half %x , -0 .0
455
+ %gtzero = fcmp nnan ogt half %x , -0 .0
421
456
%negx = fsub nnan half 0 .0 , %x
422
457
%fabs = select nnan i1 %gtzero , half %x , half %negx
423
458
ret half %fabs
@@ -430,7 +465,7 @@ define half @select_fcmp_nnan_ugt_negzero(half %x) {
430
465
; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[X:%.*]])
431
466
; CHECK-NEXT: ret half [[FABS]]
432
467
;
433
- %gtzero = fcmp ugt half %x , -0 .0
468
+ %gtzero = fcmp nnan ugt half %x , -0 .0
434
469
%negx = fsub nnan half 0 .0 , %x
435
470
%fabs = select i1 %gtzero , half %x , half %negx
436
471
ret half %fabs
0 commit comments