@@ -1872,14 +1872,11 @@ static Value *simplifyAndOrOfFCmps(const SimplifyQuery &Q, FCmpInst *LHS,
1872
1872
if ((PredL == FCmpInst::FCMP_ORD || PredL == FCmpInst::FCMP_UNO) &&
1873
1873
((FCmpInst::isOrdered (PredR) && IsAnd) ||
1874
1874
(FCmpInst::isUnordered (PredR) && !IsAnd))) {
1875
- // (fcmp ord X, NNAN) & (fcmp o** X, Y) --> fcmp o** X, Y
1876
- // (fcmp uno X, NNAN) & (fcmp o** X, Y) --> false
1877
- // (fcmp uno X, NNAN) | (fcmp u** X, Y) --> fcmp u** X, Y
1878
- // (fcmp ord X, NNAN) | (fcmp u** X, Y) --> true
1879
- if (((LHS1 == RHS0 || LHS1 == RHS1) &&
1880
- isKnownNeverNaN (LHS0, /* Depth=*/ 0 , Q)) ||
1881
- ((LHS0 == RHS0 || LHS0 == RHS1) &&
1882
- isKnownNeverNaN (LHS1, /* Depth=*/ 0 , Q)))
1875
+ // (fcmp ord X, 0) & (fcmp o** X, Y) --> fcmp o** X, Y
1876
+ // (fcmp uno X, 0) & (fcmp o** X, Y) --> false
1877
+ // (fcmp uno X, 0) | (fcmp u** X, Y) --> fcmp u** X, Y
1878
+ // (fcmp ord X, 0) | (fcmp u** X, Y) --> true
1879
+ if ((LHS0 == RHS0 || LHS0 == RHS1) && match (LHS1, m_PosZeroFP ()))
1883
1880
return FCmpInst::isOrdered (PredL) == FCmpInst::isOrdered (PredR)
1884
1881
? static_cast <Value *>(RHS)
1885
1882
: ConstantInt::getBool (LHS->getType (), !IsAnd);
@@ -1888,14 +1885,11 @@ static Value *simplifyAndOrOfFCmps(const SimplifyQuery &Q, FCmpInst *LHS,
1888
1885
if ((PredR == FCmpInst::FCMP_ORD || PredR == FCmpInst::FCMP_UNO) &&
1889
1886
((FCmpInst::isOrdered (PredL) && IsAnd) ||
1890
1887
(FCmpInst::isUnordered (PredL) && !IsAnd))) {
1891
- // (fcmp o** X, Y) & (fcmp ord X, NNAN) --> fcmp o** X, Y
1892
- // (fcmp o** X, Y) & (fcmp uno X, NNAN) --> false
1893
- // (fcmp u** X, Y) | (fcmp uno X, NNAN) --> fcmp u** X, Y
1894
- // (fcmp u** X, Y) | (fcmp ord X, NNAN) --> true
1895
- if (((RHS1 == LHS0 || RHS1 == LHS1) &&
1896
- isKnownNeverNaN (RHS0, /* Depth=*/ 0 , Q)) ||
1897
- ((RHS0 == LHS0 || RHS0 == LHS1) &&
1898
- isKnownNeverNaN (RHS1, /* Depth=*/ 0 , Q)))
1888
+ // (fcmp o** X, Y) & (fcmp ord X, 0) --> fcmp o** X, Y
1889
+ // (fcmp o** X, Y) & (fcmp uno X, 0) --> false
1890
+ // (fcmp u** X, Y) | (fcmp uno X, 0) --> fcmp u** X, Y
1891
+ // (fcmp u** X, Y) | (fcmp ord X, 0) --> true
1892
+ if ((RHS0 == LHS0 || RHS0 == LHS1) && match (RHS1, m_PosZeroFP ()))
1899
1893
return FCmpInst::isOrdered (PredL) == FCmpInst::isOrdered (PredR)
1900
1894
? static_cast <Value *>(LHS)
1901
1895
: ConstantInt::getBool (LHS->getType (), !IsAnd);
0 commit comments