@@ -715,6 +715,9 @@ 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
+
718
721
LLT Ty = MRI.getType (R);
719
722
APInt DemandedElts =
720
723
Ty.isFixedVector () ? APInt::getAllOnes (Ty.getNumElements ()) : APInt (1 , 1 );
@@ -758,6 +761,9 @@ void GISelValueTracking::computeKnownFPClass(Register R,
758
761
759
762
assert (Depth <= MaxAnalysisRecursionDepth && " Limit Search Depth" );
760
763
764
+ if (!R.isVirtual ())
765
+ return ;
766
+
761
767
MachineInstr &MI = *MRI.getVRegDef (R);
762
768
unsigned Opcode = MI.getOpcode ();
763
769
LLT DstTy = MRI.getType (R);
@@ -1046,7 +1052,7 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1046
1052
//
1047
1053
if ((Known.KnownFPClasses & fcZero) != fcNone &&
1048
1054
!Known.isKnownNeverSubnormal ()) {
1049
- DenormalMode Mode = MF->getDenormalMode (getFltSemanticForLLT (DstTy));
1055
+ DenormalMode Mode = MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () ));
1050
1056
if (Mode != DenormalMode::getIEEE ())
1051
1057
Known.KnownFPClasses |= fcZero;
1052
1058
}
@@ -1108,8 +1114,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1108
1114
1109
1115
// If the parent function flushes denormals, the canonical output cannot
1110
1116
// be a denormal.
1111
- LLT Ty = MRI.getType (Val);
1112
- const fltSemantics &FPType = getFltSemanticForLLT (Ty. getScalarType () );
1117
+ LLT Ty = MRI.getType (Val). getScalarType () ;
1118
+ const fltSemantics &FPType = getFltSemanticForLLT (Ty);
1113
1119
DenormalMode DenormMode = MF->getDenormalMode (FPType);
1114
1120
if (DenormMode == DenormalMode::getIEEE ()) {
1115
1121
if (KnownSrc.isKnownNever (fcPosZero))
@@ -1219,8 +1225,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1219
1225
if (KnownSrc.isKnownNeverNaN () && KnownSrc.cannotBeOrderedLessThanZero ())
1220
1226
Known.knownNot (fcNan);
1221
1227
1222
- LLT Ty = MRI.getType (Val);
1223
- const fltSemantics &FltSem = getFltSemanticForLLT (Ty. getScalarType () );
1228
+ LLT Ty = MRI.getType (Val). getScalarType () ;
1229
+ const fltSemantics &FltSem = getFltSemanticForLLT (Ty);
1224
1230
DenormalMode Mode = MF->getDenormalMode (FltSem);
1225
1231
1226
1232
if (KnownSrc.isKnownNeverLogicalZero (Mode))
@@ -1339,18 +1345,18 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1339
1345
1340
1346
// (fadd x, 0.0) is guaranteed to return +0.0, not -0.0.
1341
1347
if ((KnownLHS.isKnownNeverLogicalNegZero (
1342
- MF->getDenormalMode (getFltSemanticForLLT (DstTy))) ||
1348
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () ))) ||
1343
1349
KnownRHS.isKnownNeverLogicalNegZero (
1344
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))) &&
1350
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1345
1351
// Make sure output negative denormal can't flush to -0
1346
1352
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1347
1353
Known.knownNot (fcNegZero);
1348
1354
} else {
1349
1355
// Only fsub -0, +0 can return -0
1350
1356
if ((KnownLHS.isKnownNeverLogicalNegZero (
1351
- MF->getDenormalMode (getFltSemanticForLLT (DstTy))) ||
1357
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () ))) ||
1352
1358
KnownRHS.isKnownNeverLogicalPosZero (
1353
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))) &&
1359
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1354
1360
// Make sure output negative denormal can't flush to -0
1355
1361
outputDenormalIsIEEEOrPosZero (*MF, DstTy))
1356
1362
Known.knownNot (fcNegZero);
@@ -1397,10 +1403,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1397
1403
1398
1404
if ((KnownRHS.isKnownNeverInfinity () ||
1399
1405
KnownLHS.isKnownNeverLogicalZero (
1400
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))) &&
1406
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))) &&
1401
1407
(KnownLHS.isKnownNeverInfinity () ||
1402
1408
KnownRHS.isKnownNeverLogicalZero (
1403
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))))
1409
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))))
1404
1410
Known.knownNot (fcNan);
1405
1411
1406
1412
break ;
@@ -1453,9 +1459,9 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1453
1459
(KnownLHS.isKnownNeverInfinity () ||
1454
1460
KnownRHS.isKnownNeverInfinity ()) &&
1455
1461
((KnownLHS.isKnownNeverLogicalZero (
1456
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))) ||
1462
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))) ||
1457
1463
(KnownRHS.isKnownNeverLogicalZero (
1458
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))))) {
1464
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))))) {
1459
1465
Known.knownNot (fcNan);
1460
1466
}
1461
1467
@@ -1469,7 +1475,7 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1469
1475
if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
1470
1476
KnownLHS.isKnownNeverInfinity () &&
1471
1477
KnownRHS.isKnownNeverLogicalZero (
1472
- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))) {
1478
+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))) {
1473
1479
Known.knownNot (fcNan);
1474
1480
}
1475
1481
@@ -1494,10 +1500,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
1494
1500
// Infinity, nan and zero propagate from source.
1495
1501
computeKnownFPClass (R, DemandedElts, InterestedClasses, Known, Depth + 1 );
1496
1502
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 () );
1503
+ LLT DstTy = MRI.getType (Dst). getScalarType () ;
1504
+ const fltSemantics &DstSem = getFltSemanticForLLT (DstTy);
1505
+ LLT SrcTy = MRI.getType (Src). getScalarType () ;
1506
+ const fltSemantics &SrcSem = getFltSemanticForLLT (SrcTy);
1501
1507
1502
1508
// All subnormal inputs should be in the normal range in the result type.
1503
1509
if (APFloat::isRepresentableAsNormalIn (SrcSem, DstSem)) {
0 commit comments