PR3439: Correct a silly mistake in the SimplifyDemandedUseBits code for
authorEli Friedman <eli.friedman@gmail.com>
Wed, 17 Jun 2009 02:57:36 +0000 (02:57 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 17 Jun 2009 02:57:36 +0000 (02:57 +0000)
SRem.

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

lib/Transforms/Scalar/InstructionCombining.cpp
test/Transforms/InstCombine/2009-06-16-SRemDemandedBits.ll [new file with mode: 0644]

index 8dc8659648f0f446a75521eedea4f5cf68675573..170b47694afb57d95ff38883492acd516784cfb2 100644 (file)
@@ -1336,7 +1336,7 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
     if (ConstantInt *Rem = dyn_cast<ConstantInt>(I->getOperand(1))) {
       APInt RA = Rem->getValue().abs();
       if (RA.isPowerOf2()) {
-        if (DemandedMask.ule(RA))    // srem won't affect demanded bits
+        if (DemandedMask.ult(RA))    // srem won't affect demanded bits
           return I->getOperand(0);
 
         APInt LowBits = RA - 1;
diff --git a/test/Transforms/InstCombine/2009-06-16-SRemDemandedBits.ll b/test/Transforms/InstCombine/2009-06-16-SRemDemandedBits.ll
new file mode 100644 (file)
index 0000000..230e245
--- /dev/null
@@ -0,0 +1,18 @@
+; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep srem
+; PR3439
+
+define i32 @a(i32 %x) nounwind {
+entry:
+       %rem = srem i32 %x, 2
+       %and = and i32 %rem, 2
+       ret i32 %and
+}
+; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep srem
+; PR3439
+
+define i32 @a(i32 %x) nounwind {
+entry:
+       %rem = srem i32 %x, 2
+       %and = and i32 %rem, 2
+       ret i32 %and
+}