@@ -1046,7 +1046,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
10461046 //
10471047 if ((Known.KnownFPClasses & fcZero) != fcNone &&
10481048 !Known.isKnownNeverSubnormal ()) {
1049- DenormalMode Mode = MF->getDenormalMode (getFltSemanticForLLT (DstTy));
1049+ DenormalMode Mode =
1050+ MF->getDenormalMode (getFltSemanticForLLT (DstTy.getScalarType ()));
10501051 if (Mode != DenormalMode::getIEEE ())
10511052 Known.KnownFPClasses |= fcZero;
10521053 }
@@ -1108,8 +1109,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
11081109
11091110 // If the parent function flushes denormals, the canonical output cannot
11101111 // 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);
11131114 DenormalMode DenormMode = MF->getDenormalMode (FPType);
11141115 if (DenormMode == DenormalMode::getIEEE ()) {
11151116 if (KnownSrc.isKnownNever (fcPosZero))
@@ -1219,8 +1220,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
12191220 if (KnownSrc.isKnownNeverNaN () && KnownSrc.cannotBeOrderedLessThanZero ())
12201221 Known.knownNot (fcNan);
12211222
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);
12241225 DenormalMode Mode = MF->getDenormalMode (FltSem);
12251226
12261227 if (KnownSrc.isKnownNeverLogicalZero (Mode))
@@ -1338,19 +1339,19 @@ void GISelValueTracking::computeKnownFPClass(Register R,
13381339 Known.knownNot (KnownFPClass::OrderedLessThanZeroMask);
13391340
13401341 // (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 () )))) &&
13451346 // Make sure output negative denormal can't flush to -0
13461347 outputDenormalIsIEEEOrPosZero (*MF, DstTy))
13471348 Known.knownNot (fcNegZero);
13481349 } else {
13491350 // 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 () )))) &&
13541355 // Make sure output negative denormal can't flush to -0
13551356 outputDenormalIsIEEEOrPosZero (*MF, DstTy))
13561357 Known.knownNot (fcNegZero);
@@ -1396,11 +1397,11 @@ void GISelValueTracking::computeKnownFPClass(Register R,
13961397 }
13971398
13981399 if ((KnownRHS.isKnownNeverInfinity () ||
1399- KnownLHS.isKnownNeverLogicalZero (
1400- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) &&
1400+ KnownLHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1401+ getFltSemanticForLLT (DstTy. getScalarType () )))) &&
14011402 (KnownLHS.isKnownNeverInfinity () ||
14021403 KnownRHS.isKnownNeverLogicalZero (
1403- MF->getDenormalMode (getFltSemanticForLLT (DstTy)))))
1404+ MF->getDenormalMode (getFltSemanticForLLT (DstTy. getScalarType () )))))
14041405 Known.knownNot (fcNan);
14051406
14061407 break ;
@@ -1452,10 +1453,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
14521453 if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
14531454 (KnownLHS.isKnownNeverInfinity () ||
14541455 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 () )))))) {
14591460 Known.knownNot (fcNan);
14601461 }
14611462
@@ -1468,8 +1469,8 @@ void GISelValueTracking::computeKnownFPClass(Register R,
14681469 // Inf REM x and x REM 0 produce NaN.
14691470 if (KnownLHS.isKnownNeverNaN () && KnownRHS.isKnownNeverNaN () &&
14701471 KnownLHS.isKnownNeverInfinity () &&
1471- KnownRHS.isKnownNeverLogicalZero (
1472- MF-> getDenormalMode ( getFltSemanticForLLT (DstTy)))) {
1472+ KnownRHS.isKnownNeverLogicalZero (MF-> getDenormalMode (
1473+ getFltSemanticForLLT (DstTy. getScalarType () )))) {
14731474 Known.knownNot (fcNan);
14741475 }
14751476
@@ -1494,10 +1495,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
14941495 // Infinity, nan and zero propagate from source.
14951496 computeKnownFPClass (R, DemandedElts, InterestedClasses, Known, Depth + 1 );
14961497
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);
15011502
15021503 // All subnormal inputs should be in the normal range in the result type.
15031504 if (APFloat::isRepresentableAsNormalIn (SrcSem, DstSem)) {
@@ -1690,6 +1691,10 @@ void GISelValueTracking::computeKnownFPClass(Register R,
16901691 }
16911692 case TargetOpcode::COPY: {
16921693 Register Src = MI.getOperand (1 ).getReg ();
1694+
1695+ if (!Src.isVirtual ())
1696+ return ;
1697+
16931698 computeKnownFPClass (Src, DemandedElts, InterestedClasses, Known, Depth + 1 );
16941699 break ;
16951700 }
0 commit comments