Skip to content

Commit 11c4c53

Browse files
committed
Fix code to handle ninf and nnan
1 parent c01fd1a commit 11c4c53

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
@@ -8056,12 +8056,8 @@ Instruction *InstCombinerImpl::visitFCmpInst(FCmpInst &I) {
80568056
case FCmpInst::FCMP_OGE:
80578057
case FCmpInst::FCMP_OLE: {
80588058
BinaryOperator *SubI = cast<BinaryOperator>(LHSI);
8059-
if (!computeKnownFPClass(SubI->getOperand(0), SubI->getFastMathFlags(),
8060-
fcInf, LHSI, 0)
8061-
.isKnownNeverInfinity() &&
8062-
!computeKnownFPClass(SubI->getOperand(1), SubI->getFastMathFlags(),
8063-
fcInf, LHSI, 0)
8064-
.isKnownNeverInfinity())
8059+
if (!isKnownNeverInfOrNaN(SubI->getOperand(0), 0, SQ) &&
8060+
!isKnownNeverInfOrNaN(SubI->getOperand(1), 0, SQ))
80658061
break;
80668062
}
80678063
LLVM_FALLTHROUGH;

llvm/test/Transforms/InstCombine/fcmp.ll

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

1616-
define <8 x i1> @fcmp_vec_uge_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1617-
; CHECK-LABEL: @fcmp_vec_uge_fsub_const_fmf(
1618-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast uge <8 x float> [[X:%.*]], [[Y:%.*]]
1616+
define <8 x i1> @fcmp_uge_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1617+
; CHECK-LABEL: @fcmp_uge_fsub_const_ninf_vec(
1618+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf uge <8 x float> [[X:%.*]], [[Y:%.*]]
16191619
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16201620
;
1621-
%fs = fsub fast <8 x float> %x, %y
1622-
%cmp = fcmp fast uge <8 x float> %fs, zeroinitializer
1621+
%fs = fsub ninf <8 x float> %x, %y
1622+
%cmp = fcmp ninf uge <8 x float> %fs, zeroinitializer
16231623
ret <8 x i1> %cmp
16241624
}
16251625

1626-
define <8 x i1> @fcmp_vec_ule_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1627-
; CHECK-LABEL: @fcmp_vec_ule_fsub_const_fmf(
1628-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ule <8 x float> [[X:%.*]], [[Y:%.*]]
1626+
define <8 x i1> @fcmp_ule_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1627+
; CHECK-LABEL: @fcmp_ule_fsub_const_ninf_vec(
1628+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ule <8 x float> [[X:%.*]], [[Y:%.*]]
16291629
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16301630
;
1631-
%fs = fsub fast <8 x float> %x, %y
1632-
%cmp = fcmp fast ule <8 x float> %fs, zeroinitializer
1631+
%fs = fsub ninf <8 x float> %x, %y
1632+
%cmp = fcmp ninf ule <8 x float> %fs, zeroinitializer
16331633
ret <8 x i1> %cmp
16341634
}
16351635

1636-
define <8 x i1> @fcmp_vec_ueq_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1637-
; CHECK-LABEL: @fcmp_vec_ueq_fsub_const_fmf(
1638-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ueq <8 x float> [[X:%.*]], [[Y:%.*]]
1636+
define <8 x i1> @fcmp_ueq_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1637+
; CHECK-LABEL: @fcmp_ueq_fsub_const_ninf_vec(
1638+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ueq <8 x float> [[X:%.*]], [[Y:%.*]]
16391639
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16401640
;
1641-
%fs = fsub fast <8 x float> %x, %y
1642-
%cmp = fcmp fast ueq <8 x float> %fs, zeroinitializer
1641+
%fs = fsub ninf <8 x float> %x, %y
1642+
%cmp = fcmp ninf ueq <8 x float> %fs, zeroinitializer
16431643
ret <8 x i1> %cmp
16441644
}
16451645

1646-
define <8 x i1> @fcmp_vec_oge_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1647-
; CHECK-LABEL: @fcmp_vec_oge_fsub_const_fmf(
1648-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast oge <8 x float> [[X:%.*]], [[Y:%.*]]
1646+
define <8 x i1> @fcmp_oge_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1647+
; CHECK-LABEL: @fcmp_oge_fsub_const_ninf_vec(
1648+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1649+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf oge <8 x float> [[FS]], zeroinitializer
16491650
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16501651
;
1651-
%fs = fsub fast <8 x float> %x, %y
1652-
%cmp = fcmp fast oge <8 x float> %fs, zeroinitializer
1652+
%fs = fsub ninf <8 x float> %x, %y
1653+
%cmp = fcmp ninf oge <8 x float> %fs, zeroinitializer
16531654
ret <8 x i1> %cmp
16541655
}
16551656

1656-
define <8 x i1> @fcmp_vec_ole_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1657-
; CHECK-LABEL: @fcmp_vec_ole_fsub_const_fmf(
1658-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ole <8 x float> [[X:%.*]], [[Y:%.*]]
1657+
define <8 x i1> @fcmp_ole_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1658+
; CHECK-LABEL: @fcmp_ole_fsub_const_ninf_vec(
1659+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1660+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ole <8 x float> [[FS]], zeroinitializer
16591661
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16601662
;
1661-
%fs = fsub fast <8 x float> %x, %y
1662-
%cmp = fcmp fast ole <8 x float> %fs, zeroinitializer
1663+
%fs = fsub ninf <8 x float> %x, %y
1664+
%cmp = fcmp ninf ole <8 x float> %fs, zeroinitializer
16631665
ret <8 x i1> %cmp
16641666
}
16651667

1666-
define <8 x i1> @fcmp_vec_oeq_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1667-
; CHECK-LABEL: @fcmp_vec_oeq_fsub_const_fmf(
1668-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast oeq <8 x float> [[X:%.*]], [[Y:%.*]]
1668+
define <8 x i1> @fcmp_oeq_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1669+
; CHECK-LABEL: @fcmp_oeq_fsub_const_ninf_vec(
1670+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1671+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf oeq <8 x float> [[FS]], zeroinitializer
16691672
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16701673
;
1671-
%fs = fsub fast <8 x float> %x, %y
1672-
%cmp = fcmp fast oeq <8 x float> %fs, zeroinitializer
1674+
%fs = fsub ninf <8 x float> %x, %y
1675+
%cmp = fcmp ninf oeq <8 x float> %fs, zeroinitializer
16731676
ret <8 x i1> %cmp
16741677
}
16751678

1676-
define <8 x i1> @fcmp_vec_ogt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1677-
; CHECK-LABEL: @fcmp_vec_ogt_fsub_const_fmf(
1678-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ogt <8 x float> [[X:%.*]], [[Y:%.*]]
1679+
define <8 x i1> @fcmp_ogt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1680+
; CHECK-LABEL: @fcmp_ogt_fsub_const_ninf_vec(
1681+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ogt <8 x float> [[X:%.*]], [[Y:%.*]]
16791682
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16801683
;
1681-
%fs = fsub fast <8 x float> %x, %y
1682-
%cmp = fcmp fast ogt <8 x float> %fs, zeroinitializer
1684+
%fs = fsub ninf <8 x float> %x, %y
1685+
%cmp = fcmp ninf ogt <8 x float> %fs, zeroinitializer
16831686
ret <8 x i1> %cmp
16841687
}
16851688

1686-
define <8 x i1> @fcmp_vec_olt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1687-
; CHECK-LABEL: @fcmp_vec_olt_fsub_const_fmf(
1688-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast olt <8 x float> [[X:%.*]], [[Y:%.*]]
1689+
define <8 x i1> @fcmp_olt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1690+
; CHECK-LABEL: @fcmp_olt_fsub_const_ninf_vec(
1691+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf olt <8 x float> [[X:%.*]], [[Y:%.*]]
16891692
; CHECK-NEXT: ret <8 x i1> [[CMP]]
16901693
;
1691-
%fs = fsub fast <8 x float> %x, %y
1692-
%cmp = fcmp fast olt <8 x float> %fs, zeroinitializer
1694+
%fs = fsub ninf <8 x float> %x, %y
1695+
%cmp = fcmp ninf olt <8 x float> %fs, zeroinitializer
16931696
ret <8 x i1> %cmp
16941697
}
16951698

1696-
define <8 x i1> @fcmp_vec_one_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1697-
; CHECK-LABEL: @fcmp_vec_one_fsub_const_fmf(
1698-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast one <8 x float> [[X:%.*]], [[Y:%.*]]
1699+
define <8 x i1> @fcmp_one_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1700+
; CHECK-LABEL: @fcmp_one_fsub_const_ninf_vec(
1701+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf one <8 x float> [[X:%.*]], [[Y:%.*]]
16991702
; CHECK-NEXT: ret <8 x i1> [[CMP]]
17001703
;
1701-
%fs = fsub fast <8 x float> %x, %y
1702-
%cmp = fcmp fast one <8 x float> %fs, zeroinitializer
1704+
%fs = fsub ninf <8 x float> %x, %y
1705+
%cmp = fcmp ninf one <8 x float> %fs, zeroinitializer
17031706
ret <8 x i1> %cmp
17041707
}
17051708

1706-
define <8 x i1> @fcmp_vec_ugt_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1707-
; CHECK-LABEL: @fcmp_vec_ugt_fsub_const_fmf(
1708-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ugt <8 x float> [[X:%.*]], [[Y:%.*]]
1709+
define <8 x i1> @fcmp_ugt_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1710+
; CHECK-LABEL: @fcmp_ugt_fsub_const_ninf_vec(
1711+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1712+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ugt <8 x float> [[FS]], zeroinitializer
17091713
; CHECK-NEXT: ret <8 x i1> [[CMP]]
17101714
;
1711-
%fs = fsub fast <8 x float> %x, %y
1712-
%cmp = fcmp fast ugt <8 x float> %fs, zeroinitializer
1715+
%fs = fsub ninf <8 x float> %x, %y
1716+
%cmp = fcmp ninf ugt <8 x float> %fs, zeroinitializer
1717+
ret <8 x i1> %cmp
1718+
}
1719+
1720+
define <8 x i1> @fcmp_ult_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1721+
; CHECK-LABEL: @fcmp_ult_fsub_const_ninf_vec(
1722+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1723+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf ult <8 x float> [[FS]], zeroinitializer
1724+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1725+
;
1726+
%fs = fsub ninf <8 x float> %x, %y
1727+
%cmp = fcmp ninf ult <8 x float> %fs, zeroinitializer
1728+
ret <8 x i1> %cmp
1729+
}
1730+
1731+
define <8 x i1> @fcmp_une_fsub_const_ninf_vec(<8 x float> %x, <8 x float> %y) {
1732+
; CHECK-LABEL: @fcmp_une_fsub_const_ninf_vec(
1733+
; CHECK-NEXT: [[FS:%.*]] = fsub ninf <8 x float> [[X:%.*]], [[Y:%.*]]
1734+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ninf une <8 x float> [[FS]], zeroinitializer
1735+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1736+
;
1737+
%fs = fsub ninf <8 x float> %x, %y
1738+
%cmp = fcmp ninf une <8 x float> %fs, zeroinitializer
1739+
ret <8 x i1> %cmp
1740+
}
1741+
1742+
define <8 x i1> @fcmp_uge_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1743+
; CHECK-LABEL: @fcmp_uge_fsub_const_nnan_vec(
1744+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan uge <8 x float> [[X:%.*]], [[Y:%.*]]
1745+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1746+
;
1747+
%fs = fsub nnan <8 x float> %x, %y
1748+
%cmp = fcmp nnan uge <8 x float> %fs, zeroinitializer
1749+
ret <8 x i1> %cmp
1750+
}
1751+
1752+
define <8 x i1> @fcmp_ule_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1753+
; CHECK-LABEL: @fcmp_ule_fsub_const_nnan_vec(
1754+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ule <8 x float> [[X:%.*]], [[Y:%.*]]
1755+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1756+
;
1757+
%fs = fsub nnan <8 x float> %x, %y
1758+
%cmp = fcmp nnan ule <8 x float> %fs, zeroinitializer
1759+
ret <8 x i1> %cmp
1760+
}
1761+
1762+
define <8 x i1> @fcmp_ueq_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1763+
; CHECK-LABEL: @fcmp_ueq_fsub_const_nnan_vec(
1764+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ueq <8 x float> [[X:%.*]], [[Y:%.*]]
1765+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1766+
;
1767+
%fs = fsub nnan <8 x float> %x, %y
1768+
%cmp = fcmp nnan ueq <8 x float> %fs, zeroinitializer
1769+
ret <8 x i1> %cmp
1770+
}
1771+
1772+
define <8 x i1> @fcmp_oge_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1773+
; CHECK-LABEL: @fcmp_oge_fsub_const_nnan_vec(
1774+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1775+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan oge <8 x float> [[FS]], zeroinitializer
1776+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1777+
;
1778+
%fs = fsub nnan <8 x float> %x, %y
1779+
%cmp = fcmp nnan oge <8 x float> %fs, zeroinitializer
1780+
ret <8 x i1> %cmp
1781+
}
1782+
1783+
define <8 x i1> @fcmp_ole_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1784+
; CHECK-LABEL: @fcmp_ole_fsub_const_nnan_vec(
1785+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1786+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ole <8 x float> [[FS]], zeroinitializer
1787+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1788+
;
1789+
%fs = fsub nnan <8 x float> %x, %y
1790+
%cmp = fcmp nnan ole <8 x float> %fs, zeroinitializer
1791+
ret <8 x i1> %cmp
1792+
}
1793+
1794+
define <8 x i1> @fcmp_oeq_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1795+
; CHECK-LABEL: @fcmp_oeq_fsub_const_nnan_vec(
1796+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1797+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan oeq <8 x float> [[FS]], zeroinitializer
1798+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1799+
;
1800+
%fs = fsub nnan <8 x float> %x, %y
1801+
%cmp = fcmp nnan oeq <8 x float> %fs, zeroinitializer
1802+
ret <8 x i1> %cmp
1803+
}
1804+
1805+
define <8 x i1> @fcmp_ogt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1806+
; CHECK-LABEL: @fcmp_ogt_fsub_const_nnan_vec(
1807+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ogt <8 x float> [[X:%.*]], [[Y:%.*]]
1808+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1809+
;
1810+
%fs = fsub nnan <8 x float> %x, %y
1811+
%cmp = fcmp nnan ogt <8 x float> %fs, zeroinitializer
1812+
ret <8 x i1> %cmp
1813+
}
1814+
1815+
define <8 x i1> @fcmp_olt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1816+
; CHECK-LABEL: @fcmp_olt_fsub_const_nnan_vec(
1817+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan olt <8 x float> [[X:%.*]], [[Y:%.*]]
1818+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1819+
;
1820+
%fs = fsub nnan <8 x float> %x, %y
1821+
%cmp = fcmp nnan olt <8 x float> %fs, zeroinitializer
1822+
ret <8 x i1> %cmp
1823+
}
1824+
1825+
define <8 x i1> @fcmp_one_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1826+
; CHECK-LABEL: @fcmp_one_fsub_const_nnan_vec(
1827+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan one <8 x float> [[X:%.*]], [[Y:%.*]]
1828+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1829+
;
1830+
%fs = fsub nnan <8 x float> %x, %y
1831+
%cmp = fcmp nnan one <8 x float> %fs, zeroinitializer
1832+
ret <8 x i1> %cmp
1833+
}
1834+
1835+
define <8 x i1> @fcmp_ugt_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1836+
; CHECK-LABEL: @fcmp_ugt_fsub_const_nnan_vec(
1837+
; CHECK-NEXT: [[FS:%.*]] = fsub nnan <8 x float> [[X:%.*]], [[Y:%.*]]
1838+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ugt <8 x float> [[FS]], zeroinitializer
1839+
; CHECK-NEXT: ret <8 x i1> [[CMP]]
1840+
;
1841+
%fs = fsub nnan <8 x float> %x, %y
1842+
%cmp = fcmp nnan ugt <8 x float> %fs, zeroinitializer
17131843
ret <8 x i1> %cmp
17141844
}
17151845

1716-
define <8 x i1> @fcmp_vec_ult_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1717-
; CHECK-LABEL: @fcmp_vec_ult_fsub_const_fmf(
1718-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ult <8 x float> [[X:%.*]], [[Y:%.*]]
1846+
define <8 x i1> @fcmp_ult_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1847+
; CHECK-LABEL: @fcmp_ult_fsub_const_nnan_vec(
1848+
; CHECK-NEXT: [[FS:%.*]] = fsub fast <8 x float> [[X:%.*]], [[Y:%.*]]
1849+
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast ult <8 x float> [[FS]], zeroinitializer
17191850
; CHECK-NEXT: ret <8 x i1> [[CMP]]
17201851
;
17211852
%fs = fsub fast <8 x float> %x, %y
17221853
%cmp = fcmp fast ult <8 x float> %fs, zeroinitializer
17231854
ret <8 x i1> %cmp
17241855
}
17251856

1726-
define <8 x i1> @fcmp_vec_une_fsub_const_fmf(<8 x float> %x, <8 x float> %y) {
1727-
; CHECK-LABEL: @fcmp_vec_une_fsub_const_fmf(
1728-
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast une <8 x float> [[X:%.*]], [[Y:%.*]]
1857+
define <8 x i1> @fcmp_une_fsub_const_nnan_vec(<8 x float> %x, <8 x float> %y) {
1858+
; CHECK-LABEL: @fcmp_une_fsub_const_nnan_vec(
1859+
; CHECK-NEXT: [[FS:%.*]] = fsub fast <8 x float> [[X:%.*]], [[Y:%.*]]
1860+
; CHECK-NEXT: [[CMP:%.*]] = fcmp fast une <8 x float> [[FS]], zeroinitializer
17291861
; CHECK-NEXT: ret <8 x i1> [[CMP]]
17301862
;
17311863
%fs = fsub fast <8 x float> %x, %y

0 commit comments

Comments
 (0)