Fix ComputeMaskedBits to handle phis correctly.  We need to take the
minimum of the known zeros.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55137 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp
index 3a04f5e..b956d39 100644
--- a/lib/Analysis/ValueTracking.cpp
+++ b/lib/Analysis/ValueTracking.cpp
@@ -509,9 +509,13 @@
           ComputeMaskedBits(R, Mask2, KnownZero2, KnownOne2, TD, Depth+1);
           Mask2 = APInt::getLowBitsSet(BitWidth,
                                        KnownZero2.countTrailingOnes());
-          KnownOne2.clear();
-          KnownZero2.clear();
-          ComputeMaskedBits(L, Mask2, KnownZero2, KnownOne2, TD, Depth+1);
+
+          // We need to take the minimum number of known bits
+          APInt KnownZero3(KnownZero), KnownOne3(KnownOne);
+          KnownOne3.clear();
+          KnownZero3.clear();
+          ComputeMaskedBits(L, Mask2, KnownZero3, KnownOne3, TD, Depth+1);
+
           KnownZero = Mask &
                       APInt::getLowBitsSet(BitWidth,
                                            KnownZero2.countTrailingOnes());