@@ -1046,7 +1046,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1046
1046
//
1047
1047
if ((Known.KnownFPClasses & fcZero) != fcNone &&
1048
1048
!Known.isKnownNeverSubnormal ()) {
1049
- DenormalMode Mode = MF->getDenormalMode (getFltSemanticForLLT (DstTy));
1049
+ DenormalMode Mode =
1050
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy.getScalarType ()));
1050
1051
if (Mode != DenormalMode::getIEEE ())
1051
1052
Known.KnownFPClasses |= fcZero;
1052
1053
}
@@ -1108,8 +1109,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1108
1109
1109
1110
// If the parent function flushes denormals, the canonical output cannot
1110
1111
// be a denormal.
1111
- LLT Ty = MRI.getType (Val);
1112
- const fltSemantics &FPType = getFltSemanticForLLT (Ty. getScalarType () );
1112
+ LLT Ty = MRI.getType (Val). getScalarType () ;
1113
+ const fltSemantics &FPType = getFltSemanticForLLT (Ty);
1113
1114
DenormalMode DenormMode = MF->getDenormalMode (FPType);
1114
1115
if (DenormMode == DenormalMode::getIEEE ()) {
1115
1116
if (KnownSrc.isKnownNever (fcPosZero))
@@ -1219,8 +1220,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1219
1220
if (KnownSrc.isKnownNeverNaN () && KnownSrc.cannotBeOrderedLessThanZero ())
1220
1221
Known.knownNot (fcNan);
1221
1222
1222
- LLT Ty = MRI.getType (Val);
1223
- const fltSemantics &FltSem = getFltSemanticForLLT (Ty. getScalarType () );
1223
+ LLT Ty = MRI.getType (Val). getScalarType () ;
1224
+ const fltSemantics &FltSem = getFltSemanticForLLT (Ty);
1224
1225
DenormalMode Mode = MF->getDenormalMode (FltSem);
1225
1226
1226
1227
if (KnownSrc.isKnownNeverLogicalZero (Mode))
@@ -1338,19 +1339,19 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1338
1339
Known.knownNot (KnownFPClass::OrderedLessThanZeroMask);
1339
1340
1340
1341
// (fadd x, 0.0) is guaranteed to return +0.0, not -0.0.
1341
- if ((KnownLHS.isKnownNeverLogicalNegZero (
1342
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy))) ||
1343
- KnownRHS.isKnownNeverLogicalNegZero (
1344
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) &&
1342
+ if ((KnownLHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1343
+ getFltSemanticForLLT (DstTy. getScalarType () ))) ||
1344
+ KnownRHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1345
+ getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1345
1346
// Make sure output negative denormal can't flush to -0
1346
1347
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1347
1348
Known.knownNot (fcNegZero);
1348
1349
} else {
1349
1350
// Only fsub -0, +0 can return -0
1350
- if ((KnownLHS.isKnownNeverLogicalNegZero (
1351
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy))) ||
1352
- KnownRHS.isKnownNeverLogicalPosZero (
1353
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) &&
1351
+ if ((KnownLHS.isKnownNeverLogicalNegZero (MF-> getDenormalMode (
1352
+ getFltSemanticForLLT (DstTy. getScalarType () ))) ||
1353
+ KnownRHS.isKnownNeverLogicalPosZero (MF-> getDenormalMode (
1354
+ getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1354
1355
// Make sure output negative denormal can't flush to -0
1355
1356
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1356
1357
Known.knownNot (fcNegZero);
@@ -1396,11 +1397,11 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1396
1397
}
1397
1398
1398
1399
if ((KnownRHS.isKnownNeverInfinity () ||
1399
- KnownLHS.isKnownNeverLogicalZero (
1400
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) &&
1400
+ KnownLHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1401
+ getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1401
1402
(KnownLHS.isKnownNeverInfinity () ||
1402
1403
KnownRHS.isKnownNeverLogicalZero (
1403
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))))
1404
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))))
1404
1405
Known.knownNot (fcNan);
1405
1406
1406
1407
break ;
@@ -1452,10 +1453,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1452
1453
if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
1453
1454
(KnownLHS.isKnownNeverInfinity () ||
1454
1455
KnownRHS.isKnownNeverInfinity ()) &&
1455
- ((KnownLHS.isKnownNeverLogicalZero (
1456
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) ||
1457
- (KnownRHS.isKnownNeverLogicalZero (
1458
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))))) {
1456
+ ((KnownLHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1457
+ getFltSemanticForLLT (DstTy. getScalarType () )))) ||
1458
+ (KnownRHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1459
+ getFltSemanticForLLT (DstTy. getScalarType () )))))) {
1459
1460
Known.knownNot (fcNan);
1460
1461
}
1461
1462
@@ -1468,8 +1469,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1468
1469
// Inf REM x and x REM 0 produce NaN.
1469
1470
if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
1470
1471
KnownLHS.isKnownNeverInfinity () &&
1471
- KnownRHS.isKnownNeverLogicalZero (
1472
- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) {
1472
+ KnownRHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1473
+ getFltSemanticForLLT (DstTy. getScalarType () )))) {
1473
1474
Known.knownNot (fcNan);
1474
1475
}
1475
1476
@@ -1494,10 +1495,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1494
1495
// Infinity, nan and zero propagate from source.
1495
1496
computeKnownFPClass (R, DemandedElts, InterestedClasses, Known, Depth + 1 );
1496
1497
1497
- LLT DstTy = MRI.getType (Dst);
1498
- const fltSemantics &DstSem = getFltSemanticForLLT (DstTy. getScalarType () );
1499
- LLT SrcTy = MRI.getType (Src);
1500
- const fltSemantics &SrcSem = getFltSemanticForLLT (SrcTy. getScalarType () );
1498
+ LLT DstTy = MRI.getType (Dst). getScalarType () ;
1499
+ const fltSemantics &DstSem = getFltSemanticForLLT (DstTy);
1500
+ LLT SrcTy = MRI.getType (Src). getScalarType () ;
1501
+ const fltSemantics &SrcSem = getFltSemanticForLLT (SrcTy);
1501
1502
1502
1503
// All subnormal inputs should be in the normal range in the result type.
1503
1504
if (APFloat::isRepresentableAsNormalIn (SrcSem, DstSem)) {
@@ -1690,6 +1691,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1690
1691
}
1691
1692
case TargetOpcode::COPY: {
1692
1693
Register Src = MI.getOperand (1 ).getReg ();
1694
+
1695
+ if (!Src.isVirtual ())
1696
+ return ;
1697
+
1693
1698
computeKnownFPClass (Src, DemandedElts, InterestedClasses, Known, Depth + 1 );
1694
1699
break ;
1695
1700
}
0 commit comments