@@ -1284,3 +1284,205 @@ define <1 x i1> @bitcast_1vec_eq0(i32 %x) {
12841284 %cmp = fcmp oeq <1 x float > %f , zeroinitializer
12851285 ret <1 x i1 > %cmp
12861286}
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