Skip to content

Commit 8fd78e5

Browse files
committed
Fix code to handle ninf and nnan
1 parent e9f71a7 commit 8fd78e5

File tree

2 files changed

+190
-62
lines changed

2 files changed

+190
-62
lines changed

llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8027,12 +8027,8 @@ Instruction *InstCombinerImpl::visitFCmpInst(FCmpInst &I) {
80278027
case FCmpInst::FCMP_OGE:
80288028
case FCmpInst::FCMP_OLE: {
80298029
BinaryOperator *SubI = cast<BinaryOperator>(LHSI);
8030-
if (!computeKnownFPClass(SubI->getOperand(0), SubI->getFastMathFlags(),
8031-
fcInf, LHSI, 0)
8032-
.isKnownNeverInfinity() &&
8033-
!computeKnownFPClass(SubI->getOperand(1), SubI->getFastMathFlags(),
8034-
fcInf, LHSI, 0)
8035-
.isKnownNeverInfinity())
8030+
if (!isKnownNeverInfOrNaN(SubI->getOperand(0), 0, SQ) &&
8031+
!isKnownNeverInfOrNaN(SubI->getOperand(1), 0, SQ))
80368032
break;
80378033
}
80388034
LLVM_FALLTHROUGH;

llvm/test/Transforms/InstCombine/fcmp.ll

Lines changed: 188 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,119 +1411,251 @@ define i1 @fcmp_une_fsub_const(float %x, float %y) {
14111411
ret i1 %cmp
14121412
}
14131413

1414-
define <8 x i1> @fcmp_vec_uge_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1415-
; CHECK-LABEL: @fcmp_vec_uge_fsub_const_fmf(
1416-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast uge <8 x float> [[X:%.*]], [[Y:%.*]]
1414+
define <8 x i1> @fcmp_uge_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1415+
; CHECK-LABEL: @fcmp_uge_fsub_const_ninf_vec(
1416+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf uge <8 x float> [[X:%.*]], [[Y:%.*]]
14171417
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14181418
;
1419-
%fs = fsub fast <8 x float> %x, %y
1420-
%cmp = fcmp fast uge <8 x float> %fs, zeroinitializer
1419+
%fs = fsub ninf <8 x float> %x, %y
1420+
%cmp = fcmp ninf uge <8 x float> %fs, zeroinitializer
14211421
ret <8 x i1> %cmp
14221422
}
14231423

1424-
define <8 x i1> @fcmp_vec_ule_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1425-
; CHECK-LABEL: @fcmp_vec_ule_fsub_const_fmf(
1426-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ule <8 x float> [[X:%.*]], [[Y:%.*]]
1424+
define <8 x i1> @fcmp_ule_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1425+
; CHECK-LABEL: @fcmp_ule_fsub_const_ninf_vec(
1426+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ule <8 x float> [[X:%.*]], [[Y:%.*]]
14271427
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14281428
;
1429-
%fs = fsub fast <8 x float> %x, %y
1430-
%cmp = fcmp fast ule <8 x float> %fs, zeroinitializer
1429+
%fs = fsub ninf <8 x float> %x, %y
1430+
%cmp = fcmp ninf ule <8 x float> %fs, zeroinitializer
14311431
ret <8 x i1> %cmp
14321432
}
14331433

1434-
define <8 x i1> @fcmp_vec_ueq_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1435-
; CHECK-LABEL: @fcmp_vec_ueq_fsub_const_fmf(
1436-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ueq <8 x float> [[X:%.*]], [[Y:%.*]]
1434+
define <8 x i1> @fcmp_ueq_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1435+
; CHECK-LABEL: @fcmp_ueq_fsub_const_ninf_vec(
1436+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ueq <8 x float> [[X:%.*]], [[Y:%.*]]
14371437
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14381438
;
1439-
%fs = fsub fast <8 x float> %x, %y
1440-
%cmp = fcmp fast ueq <8 x float> %fs, zeroinitializer
1439+
%fs = fsub ninf <8 x float> %x, %y
1440+
%cmp = fcmp ninf ueq <8 x float> %fs, zeroinitializer
14411441
ret <8 x i1> %cmp
14421442
}
14431443

1444-
define <8 x i1> @fcmp_vec_oge_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1445-
; CHECK-LABEL: @fcmp_vec_oge_fsub_const_fmf(
1446-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast oge <8 x float> [[X:%.*]], [[Y:%.*]]
1444+
define <8 x i1> @fcmp_oge_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1445+
; CHECK-LABEL: @fcmp_oge_fsub_const_ninf_vec(
1446+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1447+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf oge <8 x float> [[FS]], zeroinitializer
14471448
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14481449
;
1449-
%fs = fsub fast <8 x float> %x, %y
1450-
%cmp = fcmp fast oge <8 x float> %fs, zeroinitializer
1450+
%fs = fsub ninf <8 x float> %x, %y
1451+
%cmp = fcmp ninf oge <8 x float> %fs, zeroinitializer
14511452
ret <8 x i1> %cmp
14521453
}
14531454

1454-
define <8 x i1> @fcmp_vec_ole_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1455-
; CHECK-LABEL: @fcmp_vec_ole_fsub_const_fmf(
1456-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ole <8 x float> [[X:%.*]], [[Y:%.*]]
1455+
define <8 x i1> @fcmp_ole_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1456+
; CHECK-LABEL: @fcmp_ole_fsub_const_ninf_vec(
1457+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1458+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ole <8 x float> [[FS]], zeroinitializer
14571459
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14581460
;
1459-
%fs = fsub fast <8 x float> %x, %y
1460-
%cmp = fcmp fast ole <8 x float> %fs, zeroinitializer
1461+
%fs = fsub ninf <8 x float> %x, %y
1462+
%cmp = fcmp ninf ole <8 x float> %fs, zeroinitializer
14611463
ret <8 x i1> %cmp
14621464
}
14631465

1464-
define <8 x i1> @fcmp_vec_oeq_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1465-
; CHECK-LABEL: @fcmp_vec_oeq_fsub_const_fmf(
1466-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast oeq <8 x float> [[X:%.*]], [[Y:%.*]]
1466+
define <8 x i1> @fcmp_oeq_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1467+
; CHECK-LABEL: @fcmp_oeq_fsub_const_ninf_vec(
1468+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1469+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf oeq <8 x float> [[FS]], zeroinitializer
14671470
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14681471
;
1469-
%fs = fsub fast <8 x float> %x, %y
1470-
%cmp = fcmp fast oeq <8 x float> %fs, zeroinitializer
1472+
%fs = fsub ninf <8 x float> %x, %y
1473+
%cmp = fcmp ninf oeq <8 x float> %fs, zeroinitializer
14711474
ret <8 x i1> %cmp
14721475
}
14731476

1474-
define <8 x i1> @fcmp_vec_ogt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1475-
; CHECK-LABEL: @fcmp_vec_ogt_fsub_const_fmf(
1476-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ogt <8 x float> [[X:%.*]], [[Y:%.*]]
1477+
define <8 x i1> @fcmp_ogt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1478+
; CHECK-LABEL: @fcmp_ogt_fsub_const_ninf_vec(
1479+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ogt <8 x float> [[X:%.*]], [[Y:%.*]]
14771480
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14781481
;
1479-
%fs = fsub fast <8 x float> %x, %y
1480-
%cmp = fcmp fast ogt <8 x float> %fs, zeroinitializer
1482+
%fs = fsub ninf <8 x float> %x, %y
1483+
%cmp = fcmp ninf ogt <8 x float> %fs, zeroinitializer
14811484
ret <8 x i1> %cmp
14821485
}
14831486

1484-
define <8 x i1> @fcmp_vec_olt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1485-
; CHECK-LABEL: @fcmp_vec_olt_fsub_const_fmf(
1486-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast olt <8 x float> [[X:%.*]], [[Y:%.*]]
1487+
define <8 x i1> @fcmp_olt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1488+
; CHECK-LABEL: @fcmp_olt_fsub_const_ninf_vec(
1489+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf olt <8 x float> [[X:%.*]], [[Y:%.*]]
14871490
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14881491
;
1489-
%fs = fsub fast <8 x float> %x, %y
1490-
%cmp = fcmp fast olt <8 x float> %fs, zeroinitializer
1492+
%fs = fsub ninf <8 x float> %x, %y
1493+
%cmp = fcmp ninf olt <8 x float> %fs, zeroinitializer
14911494
ret <8 x i1> %cmp
14921495
}
14931496

1494-
define <8 x i1> @fcmp_vec_one_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1495-
; CHECK-LABEL: @fcmp_vec_one_fsub_const_fmf(
1496-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast one <8 x float> [[X:%.*]], [[Y:%.*]]
1497+
define <8 x i1> @fcmp_one_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1498+
; CHECK-LABEL: @fcmp_one_fsub_const_ninf_vec(
1499+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf one <8 x float> [[X:%.*]], [[Y:%.*]]
14971500
; CHECK-NEXT: ret <8 x i1> [[CMP]]
14981501
;
1499-
%fs = fsub fast <8 x float> %x, %y
1500-
%cmp = fcmp fast one <8 x float> %fs, zeroinitializer
1502+
%fs = fsub ninf <8 x float> %x, %y
1503+
%cmp = fcmp ninf one <8 x float> %fs, zeroinitializer
15011504
ret <8 x i1> %cmp
15021505
}
15031506

1504-
define <8 x i1> @fcmp_vec_ugt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1505-
; CHECK-LABEL: @fcmp_vec_ugt_fsub_const_fmf(
1506-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ugt <8 x float> [[X:%.*]], [[Y:%.*]]
1507+
define <8 x i1> @fcmp_ugt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1508+
; CHECK-LABEL: @fcmp_ugt_fsub_const_ninf_vec(
1509+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1510+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ugt <8 x float> [[FS]], zeroinitializer
15071511
; CHECK-NEXT: ret <8 x i1> [[CMP]]
15081512
;
1509-
%fs = fsub fast <8 x float> %x, %y
1510-
%cmp = fcmp fast ugt <8 x float> %fs, zeroinitializer
1513+
%fs = fsub ninf <8 x float> %x, %y
1514+
%cmp = fcmp ninf ugt <8 x float> %fs, zeroinitializer
1515+
ret <8 x i1> %cmp
1516+
}
1517+
1518+
define <8 x i1> @fcmp_ult_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1519+
; CHECK-LABEL: @fcmp_ult_fsub_const_ninf_vec(
1520+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1521+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ult <8 x float> [[FS]], zeroinitializer
1522+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1523+
;
1524+
%fs = fsub ninf <8 x float> %x, %y
1525+
%cmp = fcmp ninf ult <8 x float> %fs, zeroinitializer
1526+
ret <8 x i1> %cmp
1527+
}
1528+
1529+
define <8 x i1> @fcmp_une_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1530+
; CHECK-LABEL: @fcmp_une_fsub_const_ninf_vec(
1531+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1532+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf une <8 x float> [[FS]], zeroinitializer
1533+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1534+
;
1535+
%fs = fsub ninf <8 x float> %x, %y
1536+
%cmp = fcmp ninf une <8 x float> %fs, zeroinitializer
1537+
ret <8 x i1> %cmp
1538+
}
1539+
1540+
define <8 x i1> @fcmp_uge_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1541+
; CHECK-LABEL: @fcmp_uge_fsub_const_nnan_vec(
1542+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan uge <8 x float> [[X:%.*]], [[Y:%.*]]
1543+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1544+
;
1545+
%fs = fsub nnan <8 x float> %x, %y
1546+
%cmp = fcmp nnan uge <8 x float> %fs, zeroinitializer
1547+
ret <8 x i1> %cmp
1548+
}
1549+
1550+
define <8 x i1> @fcmp_ule_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1551+
; CHECK-LABEL: @fcmp_ule_fsub_const_nnan_vec(
1552+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ule <8 x float> [[X:%.*]], [[Y:%.*]]
1553+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1554+
;
1555+
%fs = fsub nnan <8 x float> %x, %y
1556+
%cmp = fcmp nnan ule <8 x float> %fs, zeroinitializer
1557+
ret <8 x i1> %cmp
1558+
}
1559+
1560+
define <8 x i1> @fcmp_ueq_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1561+
; CHECK-LABEL: @fcmp_ueq_fsub_const_nnan_vec(
1562+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ueq <8 x float> [[X:%.*]], [[Y:%.*]]
1563+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1564+
;
1565+
%fs = fsub nnan <8 x float> %x, %y
1566+
%cmp = fcmp nnan ueq <8 x float> %fs, zeroinitializer
1567+
ret <8 x i1> %cmp
1568+
}
1569+
1570+
define <8 x i1> @fcmp_oge_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1571+
; CHECK-LABEL: @fcmp_oge_fsub_const_nnan_vec(
1572+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1573+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan oge <8 x float> [[FS]], zeroinitializer
1574+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1575+
;
1576+
%fs = fsub nnan <8 x float> %x, %y
1577+
%cmp = fcmp nnan oge <8 x float> %fs, zeroinitializer
1578+
ret <8 x i1> %cmp
1579+
}
1580+
1581+
define <8 x i1> @fcmp_ole_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1582+
; CHECK-LABEL: @fcmp_ole_fsub_const_nnan_vec(
1583+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1584+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ole <8 x float> [[FS]], zeroinitializer
1585+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1586+
;
1587+
%fs = fsub nnan <8 x float> %x, %y
1588+
%cmp = fcmp nnan ole <8 x float> %fs, zeroinitializer
1589+
ret <8 x i1> %cmp
1590+
}
1591+
1592+
define <8 x i1> @fcmp_oeq_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1593+
; CHECK-LABEL: @fcmp_oeq_fsub_const_nnan_vec(
1594+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1595+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan oeq <8 x float> [[FS]], zeroinitializer
1596+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1597+
;
1598+
%fs = fsub nnan <8 x float> %x, %y
1599+
%cmp = fcmp nnan oeq <8 x float> %fs, zeroinitializer
1600+
ret <8 x i1> %cmp
1601+
}
1602+
1603+
define <8 x i1> @fcmp_ogt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1604+
; CHECK-LABEL: @fcmp_ogt_fsub_const_nnan_vec(
1605+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ogt <8 x float> [[X:%.*]], [[Y:%.*]]
1606+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1607+
;
1608+
%fs = fsub nnan <8 x float> %x, %y
1609+
%cmp = fcmp nnan ogt <8 x float> %fs, zeroinitializer
1610+
ret <8 x i1> %cmp
1611+
}
1612+
1613+
define <8 x i1> @fcmp_olt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1614+
; CHECK-LABEL: @fcmp_olt_fsub_const_nnan_vec(
1615+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan olt <8 x float> [[X:%.*]], [[Y:%.*]]
1616+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1617+
;
1618+
%fs = fsub nnan <8 x float> %x, %y
1619+
%cmp = fcmp nnan olt <8 x float> %fs, zeroinitializer
1620+
ret <8 x i1> %cmp
1621+
}
1622+
1623+
define <8 x i1> @fcmp_one_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1624+
; CHECK-LABEL: @fcmp_one_fsub_const_nnan_vec(
1625+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan one <8 x float> [[X:%.*]], [[Y:%.*]]
1626+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1627+
;
1628+
%fs = fsub nnan <8 x float> %x, %y
1629+
%cmp = fcmp nnan one <8 x float> %fs, zeroinitializer
1630+
ret <8 x i1> %cmp
1631+
}
1632+
1633+
define <8 x i1> @fcmp_ugt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1634+
; CHECK-LABEL: @fcmp_ugt_fsub_const_nnan_vec(
1635+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1636+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ugt <8 x float> [[FS]], zeroinitializer
1637+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1638+
;
1639+
%fs = fsub nnan <8 x float> %x, %y
1640+
%cmp = fcmp nnan ugt <8 x float> %fs, zeroinitializer
15111641
ret <8 x i1> %cmp
15121642
}
15131643

1514-
define <8 x i1> @fcmp_vec_ult_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1515-
; CHECK-LABEL: @fcmp_vec_ult_fsub_const_fmf(
1516-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ult <8 x float> [[X:%.*]], [[Y:%.*]]
1644+
define <8 x i1> @fcmp_ult_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1645+
; CHECK-LABEL: @fcmp_ult_fsub_const_nnan_vec(
1646+
; CHECK-NEXT: [[FS:%.*]] = fsub fast <8 x float> [[X:%.*]], [[Y:%.*]]
1647+
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ult <8 x float> [[FS]], zeroinitializer
15171648
; CHECK-NEXT: ret <8 x i1> [[CMP]]
15181649
;
15191650
%fs = fsub fast <8 x float> %x, %y
15201651
%cmp = fcmp fast ult <8 x float> %fs, zeroinitializer
15211652
ret <8 x i1> %cmp
15221653
}
15231654

1524-
define <8 x i1> @fcmp_vec_une_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1525-
; CHECK-LABEL: @fcmp_vec_une_fsub_const_fmf(
1526-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast une <8 x float> [[X:%.*]], [[Y:%.*]]
1655+
define <8 x i1> @fcmp_une_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1656+
; CHECK-LABEL: @fcmp_une_fsub_const_nnan_vec(
1657+
; CHECK-NEXT: [[FS:%.*]] = fsub fast <8 x float> [[X:%.*]], [[Y:%.*]]
1658+
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast une <8 x float> [[FS]], zeroinitializer
15271659
; CHECK-NEXT: ret <8 x i1> [[CMP]]
15281660
;
15291661
%fs = fsub fast <8 x float> %x, %y

0 commit comments

Comments
 (0)