Fix ComputeMaskedBits to handle phis correctly. We need to take the
authorDavid Greene <greened@obbligato.org>
Thu, 21 Aug 2008 20:45:12 +0000 (20:45 +0000)
committerDavid Greene <greened@obbligato.org>
Thu, 21 Aug 2008 20:45:12 +0000 (20:45 +0000)
minimum of the known zeros.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55137 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ValueTracking.cpp

index 3a04f5eb869c8dccee19368374fd5b52f9a82348..b956d390a813370a26b18b2327a2c04014628916 100644 (file)
@@ -509,9 +509,13 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask,
           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());