@@ -1284,3 +1284,205 @@ define <1 x i1> @bitcast_1vec_eq0(i32 %x) {
1284
1284
%cmp = fcmp oeq <1 x float > %f , zeroinitializer
1285
1285
ret <1 x i1 > %cmp
1286
1286
}
1287
+
1288
+ ; Simplify fcmp (x + 0.0), y => fcmp x, y
1289
+
1290
+ define i1 @fcmp_fadd_zero_ugt (float %x , float %y ) {
1291
+ ; CHECK-LABEL: @fcmp_fadd_zero_ugt(
1292
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt float [[ADD:%.*]], [[Y:%.*]]
1293
+ ; CHECK-NEXT: ret i1 [[CMP]]
1294
+ ;
1295
+ %add = fadd float %x , 0 .000000e+00
1296
+ %cmp = fcmp ugt float %add , %y
1297
+ ret i1 %cmp
1298
+ }
1299
+
1300
+ define i1 @fcmp_fadd_zero_uge (float %x , float %y ) {
1301
+ ; CHECK-LABEL: @fcmp_fadd_zero_uge(
1302
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp uge float [[ADD:%.*]], [[Y:%.*]]
1303
+ ; CHECK-NEXT: ret i1 [[CMP]]
1304
+ ;
1305
+ %add = fadd float %x , 0 .000000e+00
1306
+ %cmp = fcmp uge float %add , %y
1307
+ ret i1 %cmp
1308
+ }
1309
+
1310
+ define i1 @fcmp_fadd_zero_ogt (float %x , float %y ) {
1311
+ ; CHECK-LABEL: @fcmp_fadd_zero_ogt(
1312
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[ADD:%.*]], [[Y:%.*]]
1313
+ ; CHECK-NEXT: ret i1 [[CMP]]
1314
+ ;
1315
+ %add = fadd float %x , 0 .000000e+00
1316
+ %cmp = fcmp ogt float %add , %y
1317
+ ret i1 %cmp
1318
+ }
1319
+
1320
+ define i1 @fcmp_fadd_zero_oge (float %x , float %y ) {
1321
+ ; CHECK-LABEL: @fcmp_fadd_zero_oge(
1322
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp oge float [[ADD:%.*]], [[Y:%.*]]
1323
+ ; CHECK-NEXT: ret i1 [[CMP]]
1324
+ ;
1325
+ %add = fadd float %x , 0 .000000e+00
1326
+ %cmp = fcmp oge float %add , %y
1327
+ ret i1 %cmp
1328
+ }
1329
+
1330
+ define i1 @fcmp_fadd_zero_ult (float %x , float %y ) {
1331
+ ; CHECK-LABEL: @fcmp_fadd_zero_ult(
1332
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ult float [[ADD:%.*]], [[Y:%.*]]
1333
+ ; CHECK-NEXT: ret i1 [[CMP]]
1334
+ ;
1335
+ %add = fadd float %x , 0 .000000e+00
1336
+ %cmp = fcmp ult float %add , %y
1337
+ ret i1 %cmp
1338
+ }
1339
+
1340
+ define i1 @fcmp_fadd_zero_ule (float %x , float %y ) {
1341
+ ; CHECK-LABEL: @fcmp_fadd_zero_ule(
1342
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ule float [[ADD:%.*]], [[Y:%.*]]
1343
+ ; CHECK-NEXT: ret i1 [[CMP]]
1344
+ ;
1345
+ %add = fadd float %x , 0 .000000e+00
1346
+ %cmp = fcmp ule float %add , %y
1347
+ ret i1 %cmp
1348
+ }
1349
+
1350
+ define i1 @fcmp_fadd_zero_olt (float %x , float %y ) {
1351
+ ; CHECK-LABEL: @fcmp_fadd_zero_olt(
1352
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[ADD:%.*]], [[Y:%.*]]
1353
+ ; CHECK-NEXT: ret i1 [[CMP]]
1354
+ ;
1355
+ %add = fadd float %x , 0 .000000e+00
1356
+ %cmp = fcmp olt float %add , %y
1357
+ ret i1 %cmp
1358
+ }
1359
+
1360
+ define i1 @fcmp_fadd_zero_ole (float %x , float %y ) {
1361
+ ; CHECK-LABEL: @fcmp_fadd_zero_ole(
1362
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ole float [[ADD:%.*]], [[Y:%.*]]
1363
+ ; CHECK-NEXT: ret i1 [[CMP]]
1364
+ ;
1365
+ %add = fadd float %x , 0 .000000e+00
1366
+ %cmp = fcmp ole float %add , %y
1367
+ ret i1 %cmp
1368
+ }
1369
+
1370
+ define i1 @fcmp_fadd_zero_oeq (float %x , float %y ) {
1371
+ ; CHECK-LABEL: @fcmp_fadd_zero_oeq(
1372
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq float [[ADD:%.*]], [[Y:%.*]]
1373
+ ; CHECK-NEXT: ret i1 [[CMP]]
1374
+ ;
1375
+ %add = fadd float %x , 0 .000000e+00
1376
+ %cmp = fcmp oeq float %add , %y
1377
+ ret i1 %cmp
1378
+ }
1379
+
1380
+ define i1 @fcmp_fadd_zero_one (float %x , float %y ) {
1381
+ ; CHECK-LABEL: @fcmp_fadd_zero_one(
1382
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp one float [[ADD:%.*]], [[Y:%.*]]
1383
+ ; CHECK-NEXT: ret i1 [[CMP]]
1384
+ ;
1385
+ %add = fadd float %x , 0 .000000e+00
1386
+ %cmp = fcmp one float %add , %y
1387
+ ret i1 %cmp
1388
+ }
1389
+
1390
+ define i1 @fcmp_fadd_zero_ueq (float %x , float %y ) {
1391
+ ; CHECK-LABEL: @fcmp_fadd_zero_ueq(
1392
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq float [[ADD:%.*]], [[Y:%.*]]
1393
+ ; CHECK-NEXT: ret i1 [[CMP]]
1394
+ ;
1395
+ %add = fadd float %x , 0 .000000e+00
1396
+ %cmp = fcmp ueq float %add , %y
1397
+ ret i1 %cmp
1398
+ }
1399
+
1400
+ define i1 @fcmp_fadd_zero_une (float %x , float %y ) {
1401
+ ; CHECK-LABEL: @fcmp_fadd_zero_une(
1402
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une float [[ADD:%.*]], [[Y:%.*]]
1403
+ ; CHECK-NEXT: ret i1 [[CMP]]
1404
+ ;
1405
+ %add = fadd float %x , 0 .000000e+00
1406
+ %cmp = fcmp une float %add , %y
1407
+ ret i1 %cmp
1408
+ }
1409
+
1410
+ define i1 @fcmp_fadd_zero_ord (float %x , float %y ) {
1411
+ ; CHECK-LABEL: @fcmp_fadd_zero_ord(
1412
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ord float [[ADD:%.*]], [[Y:%.*]]
1413
+ ; CHECK-NEXT: ret i1 [[CMP]]
1414
+ ;
1415
+ %add = fadd float %x , 0 .000000e+00
1416
+ %cmp = fcmp ord float %add , %y
1417
+ ret i1 %cmp
1418
+ }
1419
+
1420
+ define i1 @fcmp_fadd_zero_uno (float %x , float %y ) {
1421
+ ; CHECK-LABEL: @fcmp_fadd_zero_uno(
1422
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp uno float [[ADD:%.*]], [[Y:%.*]]
1423
+ ; CHECK-NEXT: ret i1 [[CMP]]
1424
+ ;
1425
+ %add = fadd float %x , 0 .000000e+00
1426
+ %cmp = fcmp uno float %add , %y
1427
+ ret i1 %cmp
1428
+ }
1429
+
1430
+ define i1 @fcmp_fadd_neg_zero (float %x , float %y ) {
1431
+ ; CHECK-LABEL: @fcmp_fadd_neg_zero(
1432
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt float [[X:%.*]], [[Y:%.*]]
1433
+ ; CHECK-NEXT: ret i1 [[CMP]]
1434
+ ;
1435
+ %add = fadd float %x , -0 .000000e+00
1436
+ %cmp = fcmp ugt float %add , %y
1437
+ ret i1 %cmp
1438
+ }
1439
+
1440
+ define i1 @fcmp_fadd_zero_switched (float %x , float %y ) {
1441
+ ; CHECK-LABEL: @fcmp_fadd_zero_switched(
1442
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ult float [[Y:%.*]], [[X:%.*]]
1443
+ ; CHECK-NEXT: ret i1 [[CMP]]
1444
+ ;
1445
+ %add = fadd float %y , 0 .000000e+00
1446
+ %cmp = fcmp ugt float %x , %add
1447
+ ret i1 %cmp
1448
+ }
1449
+
1450
+ define <2 x i1 > @fcmp_fadd_zero_vec (<2 x float > %x , <2 x float > %y ) {
1451
+ ; CHECK-LABEL: @fcmp_fadd_zero_vec(
1452
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt <2 x float> [[X:%.*]], [[Y:%.*]]
1453
+ ; CHECK-NEXT: ret <2 x i1> [[CMP]]
1454
+ ;
1455
+ %add = fadd <2 x float > %x , <float 0 .0 , float -0 .0 >
1456
+ %cmp = fcmp ugt <2 x float > %add , %y
1457
+ ret <2 x i1 > %cmp
1458
+ }
1459
+
1460
+ define i1 @fcmp_fast_fadd_fast_zero (float %x , float %y ) {
1461
+ ; CHECK-LABEL: @fcmp_fast_fadd_fast_zero(
1462
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ugt float [[X:%.*]], [[Y:%.*]]
1463
+ ; CHECK-NEXT: ret i1 [[CMP]]
1464
+ ;
1465
+ %add = fadd fast float %x , 0 .000000e+00
1466
+ %cmp = fcmp fast ugt float %add , %y
1467
+ ret i1 %cmp
1468
+ }
1469
+
1470
+ define i1 @fcmp_fast_fadd_zero (float %x , float %y ) {
1471
+ ; CHECK-LABEL: @fcmp_fast_fadd_zero(
1472
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ugt float [[X:%.*]], [[Y:%.*]]
1473
+ ; CHECK-NEXT: ret i1 [[CMP]]
1474
+ ;
1475
+ %add = fadd float %x , 0 .000000e+00
1476
+ %cmp = fcmp fast ugt float %add , %y
1477
+ ret i1 %cmp
1478
+ }
1479
+
1480
+ define i1 @fcmp_fadd_fast_zero (float %x , float %y ) {
1481
+ ; CHECK-LABEL: @fcmp_fadd_fast_zero(
1482
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt float [[X:%.*]], [[Y:%.*]]
1483
+ ; CHECK-NEXT: ret i1 [[CMP]]
1484
+ ;
1485
+ %add = fadd fast float %x , 0 .000000e+00
1486
+ %cmp = fcmp ugt float %add , %y
1487
+ ret i1 %cmp
1488
+ }
0 commit comments