Update CMakeLists.txt
[oota-llvm.git] / lib / Analysis / ValueTracking.cpp
index 3a04f5eb869c8dccee19368374fd5b52f9a82348..c51a719313f2a12ae7d000faa27eb86342f10697 100644 (file)
@@ -509,12 +509,15 @@ 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);
+          ComputeMaskedBits(L, Mask2, KnownZero3, KnownOne3, TD, Depth+1);
+
           KnownZero = Mask &
                       APInt::getLowBitsSet(BitWidth,
-                                           KnownZero2.countTrailingOnes());
+                                           std::min(KnownZero2.countTrailingOnes(),
+                                                    KnownZero3.countTrailingOnes()));
           break;
         }
       }