[llvm-commits] [llvm] r94745 - in /llvm/trunk: lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp test/Transforms/InstCombine/2010-01-28-NegativeSRem.ll
Chris Lattner
clattner at apple.com
Thu Jan 28 14:15:49 PST 2010
On Jan 28, 2010, at 9:22 AM, Duncan Sands wrote:
> Author: baldrick
> Date: Thu Jan 28 11:22:42 2010
> New Revision: 94745
>
> URL: http://llvm.org/viewvc/llvm-project?rev=94745&view=rev
> Log:
> Fix PR6165. The bug was that LHSKnownZero was being and'd with
> DemandedMask
> when it should have been and'd with LowBits. Fix that and while
> there beef
> up the logic in the case of a negative LHS.
Thanks Duncan,
Does DAG combine have similar code and a similar bug?
-Chris
>
> Added:
> llvm/trunk/test/Transforms/InstCombine/2010-01-28-NegativeSRem.ll
> Modified:
> llvm/trunk/lib/Transforms/InstCombine/
> InstCombineSimplifyDemanded.cpp
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/
> InstCombineSimplifyDemanded.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp?rev=94745&r1=94744&r2=94745&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/
> InstCombineSimplifyDemanded.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/
> InstCombineSimplifyDemanded.cpp Thu Jan 28 11:22:42 2010
> @@ -681,10 +681,19 @@
> LHSKnownZero, LHSKnownOne, Depth+1))
> return I;
>
> + // The low bits of LHS are unchanged by the srem.
> + KnownZero |= LHSKnownZero & LowBits;
> + KnownOne |= LHSKnownOne & LowBits;
> +
> + // If LHS is non-negative or has all low bits zero, then
> the upper bits
> + // are all zero.
> if (LHSKnownZero[BitWidth-1] || ((LHSKnownZero & LowBits) ==
> LowBits))
> - LHSKnownZero |= ~LowBits;
> + KnownZero |= ~LowBits;
>
> - KnownZero |= LHSKnownZero & DemandedMask;
> + // If LHS is negative and not all low bits are zero, then
> the upper bits
> + // are all one.
> + if (LHSKnownOne[BitWidth-1] && ((LHSKnownOne & LowBits) !=
> 0))
> + KnownOne |= ~LowBits;
>
> assert(!(KnownZero & KnownOne) && "Bits known to be one AND
> zero?");
> }
>
> Added: llvm/trunk/test/Transforms/InstCombine/2010-01-28-
> NegativeSRem.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2010-01-28-NegativeSRem.ll?rev=94745&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Transforms/InstCombine/2010-01-28-
> NegativeSRem.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/2010-01-28-
> NegativeSRem.ll Thu Jan 28 11:22:42 2010
> @@ -0,0 +1,19 @@
> +; RUN: opt < %s -instcombine -S | FileCheck %s
> +; PR6165
> +
> +define i32 @f() {
> +entry:
> + br label %BB1
> +
> +BB1: ; preds = %BB1,
> %entry
> +; CHECK: BB1:
> + %x = phi i32 [ -29, %entry ], [ 0, %BB1 ] ; <i32> [#uses=2]
> + %rem = srem i32 %x, 2 ; <i32> [#uses=1]
> + %t = icmp eq i32 %rem, -1 ; <i1> [#uses=1]
> + br i1 %t, label %BB2, label %BB1
> +; CHECK-NOT: br i1 false
> +
> +BB2: ; preds = %BB1
> +; CHECK: BB2:
> + ret i32 %x
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list