[InstCombine] Use a more targeted fix instead of r235544
[oota-llvm.git] / lib / Transforms / InstCombine / InstCombineSimplifyDemanded.cpp
index 0695ec17e36504ba69412892b7b7880111233be2..3dbb1b190be65b1b40d89c82fff71b60b945979b 100644 (file)
@@ -88,13 +88,6 @@ bool InstCombiner::SimplifyDemandedBits(Use &U, APInt DemandedMask,
                                           KnownOne, Depth, UserI);
   if (!NewVal) return false;
   U = NewVal;
-
-  // Shrinking a constant might cause a nsw/nuw violation to occur in
-  // instructions which are themselves demanded.
-  if (auto *UserOBO = dyn_cast<OverflowingBinaryOperator>(UserI)) {
-    cast<BinaryOperator>(UserOBO)->setHasNoSignedWrap(false);
-    cast<BinaryOperator>(UserOBO)->setHasNoUnsignedWrap(false);
-  }
   return true;
 }
 
@@ -607,8 +600,11 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
         if (SimplifyDemandedBits(I->getOperandUse(0), DemandedFromOps,
                                  LHSKnownZero, LHSKnownOne, Depth + 1) ||
             SimplifyDemandedBits(I->getOperandUse(1), DemandedFromOps,
-                                 LHSKnownZero, LHSKnownOne, Depth + 1))
+                                 LHSKnownZero, LHSKnownOne, Depth + 1)) {
+          cast<BinaryOperator>(I)->setHasNoSignedWrap(false);
+          cast<BinaryOperator>(I)->setHasNoUnsignedWrap(false);
           return I;
+        }
       }
     }
     break;
@@ -624,8 +620,11 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
       if (SimplifyDemandedBits(I->getOperandUse(0), DemandedFromOps,
                                LHSKnownZero, LHSKnownOne, Depth + 1) ||
           SimplifyDemandedBits(I->getOperandUse(1), DemandedFromOps,
-                               LHSKnownZero, LHSKnownOne, Depth + 1))
+                               LHSKnownZero, LHSKnownOne, Depth + 1)) {
+        cast<BinaryOperator>(I)->setHasNoSignedWrap(false);
+        cast<BinaryOperator>(I)->setHasNoUnsignedWrap(false);
         return I;
+      }
     }
 
     // Otherwise just hand the sub off to computeKnownBits to fill in