@@ -715,9 +715,6 @@ static bool outputDenormalIsIEEEOrPosZero(const MachineFunction &MF, LLT Ty) {
715
715
void GISelValueTracking::computeKnownFPClass (Register R, KnownFPClass &Known,
716
716
FPClassTest InterestedClasses,
717
717
unsigned Depth) {
718
- if (!R.isVirtual ())
719
- return ;
720
-
721
718
LLT Ty = MRI.getType (R);
722
719
APInt DemandedElts =
723
720
Ty.isFixedVector () ? APInt::getAllOnes (Ty.getNumElements ()) : APInt (1 , 1 );
@@ -761,9 +758,6 @@ void GISelValueTracking::computeKnownFPClass(Register R,
761
758
762
759
assert (Depth <= MaxAnalysisRecursionDepth && " Limit Search Depth" );
763
760
764
- if (!R.isVirtual ())
765
- return ;
766
-
767
761
MachineInstr &MI = *MRI.getVRegDef (R);
768
762
unsigned Opcode = MI.getOpcode ();
769
763
LLT DstTy = MRI.getType (R);
@@ -1052,7 +1046,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1052
1046
//
1053
1047
if ((Known.KnownFPClasses & fcZero) != fcNone &&
1054
1048
!Known.isKnownNeverSubnormal ()) {
1055
- DenormalMode Mode = MF->getDenormalMode (getFltSemanticForLLT (DstTy.getScalarType ()));
1049
+ DenormalMode Mode =
1050
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy.getScalarType ()));
1056
1051
if (Mode != DenormalMode::getIEEE ())
1057
1052
Known.KnownFPClasses |= fcZero;
1058
1053
}
@@ -1344,19 +1339,19 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1344
1339
Known.knownNot (KnownFPClass::OrderedLessThanZeroMask);
1345
1340
1346
1341
// (fadd x, 0.0) is guaranteed to return +0.0, not -0.0.
1347
- if ((KnownLHS.isKnownNeverLogicalNegZero (
1348
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ()))) ||
1349
- KnownRHS.isKnownNeverLogicalNegZero (
1350
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1342
+ if ((KnownLHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1343
+ getFltSemanticForLLT (DstTy.getScalarType ()))) ||
1344
+ KnownRHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1345
+ getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1351
1346
// Make sure output negative denormal can't flush to -0
1352
1347
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1353
1348
Known.knownNot (fcNegZero);
1354
1349
} else {
1355
1350
// Only fsub -0, +0 can return -0
1356
- if ((KnownLHS.isKnownNeverLogicalNegZero (
1357
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ()))) ||
1358
- KnownRHS.isKnownNeverLogicalPosZero (
1359
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1351
+ if ((KnownLHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1352
+ getFltSemanticForLLT (DstTy.getScalarType ()))) ||
1353
+ KnownRHS.isKnownNeverLogicalPosZero (MF-> getDenormalMode (
1354
+ getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1360
1355
// Make sure output negative denormal can't flush to -0
1361
1356
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1362
1357
Known.knownNot (fcNegZero);
@@ -1402,8 +1397,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1402
1397
}
1403
1398
1404
1399
if ((KnownRHS.isKnownNeverInfinity () ||
1405
- KnownLHS.isKnownNeverLogicalZero (
1406
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1400
+ KnownLHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1401
+ getFltSemanticForLLT (DstTy.getScalarType ())))) &&
1407
1402
(KnownLHS.isKnownNeverInfinity () ||
1408
1403
KnownRHS.isKnownNeverLogicalZero (
1409
1404
MF->getDenormalMode (getFltSemanticForLLT (DstTy.getScalarType ())))))
@@ -1458,10 +1453,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1458
1453
if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
1459
1454
(KnownLHS.isKnownNeverInfinity () ||
1460
1455
KnownRHS.isKnownNeverInfinity ()) &&
1461
- ((KnownLHS.isKnownNeverLogicalZero (
1462
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))) ||
1463
- (KnownRHS.isKnownNeverLogicalZero (
1464
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))))) {
1456
+ ((KnownLHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1457
+ getFltSemanticForLLT (DstTy.getScalarType ())))) ||
1458
+ (KnownRHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1459
+ getFltSemanticForLLT (DstTy.getScalarType ())))))) {
1465
1460
Known.knownNot (fcNan);
1466
1461
}
1467
1462
@@ -1474,8 +1469,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1474
1469
// Inf REM x and x REM 0 produce NaN.
1475
1470
if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
1476
1471
KnownLHS.isKnownNeverInfinity () &&
1477
- KnownRHS.isKnownNeverLogicalZero (
1478
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy.getScalarType ())))) {
1472
+ KnownRHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1473
+ getFltSemanticForLLT (DstTy.getScalarType ())))) {
1479
1474
Known.knownNot (fcNan);
1480
1475
}
1481
1476
@@ -1696,6 +1691,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1696
1691
}
1697
1692
case TargetOpcode::COPY: {
1698
1693
Register Src = MI.getOperand (1 ).getReg ();
1694
+
1695
+ if (!Src.isVirtual ())
1696
+ return ;
1697
+
1699
1698
computeKnownFPClass (Src, DemandedElts, InterestedClasses, Known, Depth + 1 );
1700
1699
break ;
1701
1700
}
0 commit comments