@@ -1383,32 +1383,33 @@ WidenIV::getExtendedOperandRecurrence(WidenIV::NarrowIVDefUse DU) {
1383
1383
DU.NarrowUse ->getOperand (0 ) == DU.NarrowDef ? 1 : 0 ;
1384
1384
assert (DU.NarrowUse ->getOperand (1 -ExtendOperIdx) == DU.NarrowDef && " bad DU" );
1385
1385
1386
- const SCEV *ExtendOperExpr = nullptr ;
1387
1386
const OverflowingBinaryOperator *OBO =
1388
1387
cast<OverflowingBinaryOperator>(DU.NarrowUse );
1389
1388
ExtendKind ExtKind = getExtendKind (DU.NarrowDef );
1390
- if (ExtKind == ExtendKind::Sign && OBO->hasNoSignedWrap ())
1391
- ExtendOperExpr = SE->getSignExtendExpr (
1392
- SE->getSCEV (DU.NarrowUse ->getOperand (ExtendOperIdx)), WideType);
1393
- else if (ExtKind == ExtendKind::Zero && OBO->hasNoUnsignedWrap ())
1394
- ExtendOperExpr = SE->getZeroExtendExpr (
1395
- SE->getSCEV (DU.NarrowUse ->getOperand (ExtendOperIdx)), WideType);
1396
- else if (DU.NeverNegative ) {
1389
+ if (!(ExtKind == ExtendKind::Sign && OBO->hasNoSignedWrap ()) &&
1390
+ !(ExtKind == ExtendKind::Zero && OBO->hasNoUnsignedWrap ())) {
1391
+ ExtKind = ExtendKind::Unknown;
1392
+
1397
1393
// For a non-negative NarrowDef, we can choose either type of
1398
1394
// extension. We want to use the current extend kind if legal
1399
1395
// (see above), and we only hit this code if we need to check
1400
1396
// the opposite case.
1401
- if (OBO->hasNoSignedWrap ()) {
1402
- ExtKind = ExtendKind::Sign;
1403
- ExtendOperExpr = SE->getSignExtendExpr (
1404
- SE->getSCEV (DU.NarrowUse ->getOperand (ExtendOperIdx)), WideType);
1405
- } else if (OBO->hasNoUnsignedWrap ()) {
1406
- ExtKind = ExtendKind::Zero;
1407
- ExtendOperExpr = SE->getZeroExtendExpr (
1408
- SE->getSCEV (DU.NarrowUse ->getOperand (ExtendOperIdx)), WideType);
1409
- } else
1410
- return {nullptr , ExtendKind::Unknown};
1411
- } else
1397
+ if (DU.NeverNegative ) {
1398
+ if (OBO->hasNoSignedWrap ()) {
1399
+ ExtKind = ExtendKind::Sign;
1400
+ } else if (OBO->hasNoUnsignedWrap ()) {
1401
+ ExtKind = ExtendKind::Zero;
1402
+ }
1403
+ }
1404
+ }
1405
+
1406
+ const SCEV *ExtendOperExpr =
1407
+ SE->getSCEV (DU.NarrowUse ->getOperand (ExtendOperIdx));
1408
+ if (ExtKind == ExtendKind::Sign)
1409
+ ExtendOperExpr = SE->getSignExtendExpr (ExtendOperExpr, WideType);
1410
+ else if (ExtKind == ExtendKind::Zero)
1411
+ ExtendOperExpr = SE->getZeroExtendExpr (ExtendOperExpr, WideType);
1412
+ else
1412
1413
return {nullptr , ExtendKind::Unknown};
1413
1414
1414
1415
// When creating this SCEV expr, don't apply the current operations NSW or NUW
0 commit comments