[llvm] r276502 - [InstCombine] move udiv+cmp fold over with other BinOp+cmp folds; NFCI

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 22 17:28:39 PDT 2016


Author: spatel
Date: Fri Jul 22 19:28:39 2016
New Revision: 276502

URL: http://llvm.org/viewvc/llvm-project?rev=276502&view=rev
Log:
[InstCombine] move udiv+cmp fold over with other BinOp+cmp folds; NFCI

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=276502&r1=276501&r2=276502&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Fri Jul 22 19:28:39 2016
@@ -2341,6 +2341,14 @@ Instruction *InstCombiner::foldICmpEqual
       }
     }
     break;
+  case Instruction::UDiv:
+    if (RHSV == 0) {
+      // (icmp eq/ne (udiv A, B), 0) -> (icmp ugt/ule i32 B, A)
+      ICmpInst::Predicate Pred =
+          isICMP_NE ? ICmpInst::ICMP_ULE : ICmpInst::ICMP_UGT;
+      return new ICmpInst(Pred, BO->getOperand(1), BO->getOperand(0));
+    }
+    break;
   default:
     break;
   }
@@ -3634,7 +3642,6 @@ Instruction *InstCombiner::visitICmpInst
   // See if we are doing a comparison between a constant and an instruction that
   // can be folded into the comparison.
   if (ConstantInt *CI = dyn_cast<ConstantInt>(Op1)) {
-    Value *A = nullptr, *B = nullptr;
     // Since the RHS is a ConstantInt (CI), if the left hand side is an
     // instruction, see if that instruction also has constants so that the
     // instruction can be folded into the icmp
@@ -3646,14 +3653,6 @@ Instruction *InstCombiner::visitICmpInst
       if (Instruction *Res = foldICmpIntrinsicWithConstant(I, LHSI, CI))
         return Res;
     }
-    // (icmp eq/ne (udiv A, B), 0) -> (icmp ugt/ule i32 B, A)
-    if (I.isEquality() && CI->isZero() &&
-        match(Op0, m_UDiv(m_Value(A), m_Value(B)))) {
-      ICmpInst::Predicate Pred = I.getPredicate() == ICmpInst::ICMP_EQ
-                                     ? ICmpInst::ICMP_UGT
-                                     : ICmpInst::ICMP_ULE;
-      return new ICmpInst(Pred, B, A);
-    }
   }
 
   // Handle icmp with constant (but not simple integer constant) RHS




More information about the llvm-commits mailing list