Fix a mistake in the computation of leading zeros for udiv.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50591 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 18bb040..6b2f543 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1257,7 +1257,7 @@
   case ISD::UDIV: {
     // For the purposes of computing leading zeros we can conservatively
     // treat a udiv as a logical right shift by the power of 2 known to
-    // be greater than the denominator.
+    // be less than the denominator.
     APInt AllOnes = APInt::getAllOnesValue(BitWidth);
     ComputeMaskedBits(Op.getOperand(0),
                       AllOnes, KnownZero2, KnownOne2, Depth+1);
@@ -1267,8 +1267,10 @@
     KnownZero2.clear();
     ComputeMaskedBits(Op.getOperand(1),
                       AllOnes, KnownZero2, KnownOne2, Depth+1);
-    LeadZ = std::min(BitWidth,
-                     LeadZ + BitWidth - KnownOne2.countLeadingZeros());
+    unsigned RHSUnknownLeadingOnes = KnownOne2.countLeadingZeros();
+    if (RHSUnknownLeadingOnes != BitWidth)
+      LeadZ = std::min(BitWidth,
+                       LeadZ + BitWidth - RHSUnknownLeadingOnes - 1);
 
     KnownZero = APInt::getHighBitsSet(BitWidth, LeadZ) & Mask;
     return;