Fix logic error in previous commit. The != case needs to become an or, not an
authorNick Lewycky <nicholas@mxc.ca>
Sat, 2 Jan 2010 16:14:56 +0000 (16:14 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 2 Jan 2010 16:14:56 +0000 (16:14 +0000)
and.

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

lib/Transforms/Scalar/InstructionCombining.cpp
test/Transforms/InstCombine/or.ll

index e208d69f7c65c116542f657b412fe1c94edaa381..50e9f24cc18f50c43ef3122aa624c53a80a6bd5b 100644 (file)
@@ -7324,9 +7324,13 @@ Instruction *InstCombiner::visitICmpInstWithInstAndIntCst(ICmpInst &ICI,
                                         Constant::getNullValue(P->getType()));
       Value *ICIQ = Builder->CreateICmp(ICI.getPredicate(), Q,
                                         Constant::getNullValue(Q->getType()));
-      Instruction *And = BinaryOperator::CreateAnd(ICIP, ICIQ, "");
-      And->takeName(&ICI);
-      return And;
+      Instruction *Op;
+      if (ICI.getPredicate() == ICmpInst::ICMP_EQ)
+        Op = BinaryOperator::CreateAnd(ICIP, ICIQ, "");
+      else
+        Op = BinaryOperator::CreateOr(ICIP, ICIQ, "");
+      Op->takeName(&ICI);
+      return Op;
     }
     break;
   }
index 33058b5334ca1f8c19abecf7d1c94eb2786ff0ad..44228ba357cb357883e0debb56e0bba42174362c 100644 (file)
@@ -293,3 +293,17 @@ define i1 @test28(i32 %A, i32 %B) {
 ; CHECK: icmp ne i32 {{.*}}, 0
 ; CHECK: ret i1 
 }
+
+define i1 @test29(i32* %A, i32* %B) {
+  %C1 = ptrtoint i32* %A to i32
+  %C2 = ptrtoint i32* %B to i32
+  %D = or i32 %C1, %C2
+  %E = icmp ne i32 %D, 0
+  ret i1 %E
+; CHECK: @test29
+; CHECK: icmp ne i32* %A, null
+; CHECK: icmp ne i32* %B, null
+; CHECK: or i1
+; CHECK: ret i1
+}
+