From: Eli Friedman Date: Mon, 5 Mar 2012 23:09:40 +0000 (+0000) Subject: Make sure we don't return bits outside the mask in ComputeMaskedBits. PR12189. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=049d08f5c9e4f9f5c71d8f8d08d846ba15f2ae99;p=oota-llvm.git Make sure we don't return bits outside the mask in ComputeMaskedBits. PR12189. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152066 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index b5811f2e8ae..b35e2074acb 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -691,8 +691,8 @@ void llvm::ComputeMaskedBits(Value *V, const APInt &Mask, if (P->hasConstantValue() == P) break; - KnownZero = APInt::getAllOnesValue(BitWidth); - KnownOne = APInt::getAllOnesValue(BitWidth); + KnownZero = Mask; + KnownOne = Mask; for (unsigned i = 0, e = P->getNumIncomingValues(); i != e; ++i) { // Skip direct self references. if (P->getIncomingValue(i) == P) continue; diff --git a/test/Transforms/InstSimplify/phi.ll b/test/Transforms/InstSimplify/phi.ll new file mode 100644 index 00000000000..05cd40d9021 --- /dev/null +++ b/test/Transforms/InstSimplify/phi.ll @@ -0,0 +1,22 @@ +; RUN: opt < %s -instsimplify -S | FileCheck %s + +; PR12189 +define i1 @test1(i32 %x) { +; CHECK: @test1 + br i1 true, label %a, label %b + +a: + %aa = or i32 %x, 10 + br label %c + +b: + %bb = or i32 %x, 10 + br label %c + +c: + %cc = phi i32 [ %bb, %b ], [%aa, %a ] + %d = urem i32 %cc, 2 + %e = icmp eq i32 %d, 0 + ret i1 %e +; CHECK: ret i1 %e +}