[PATCH] D20123: [InstCombine] Fold icmp ugt/ult (udiv i32 C2, X), C1

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Tue May 10 12:04:21 PDT 2016


majnemer accepted this revision.
majnemer added a comment.
This revision is now accepted and ready to land.

LGTM with nits.


================
Comment at: lib/Transforms/InstCombine/InstCombineCompares.cpp:2103-2106
@@ +2102,6 @@
+      assert(C2 != 0 && "udiv 0, X should have been simplified already.");
+      // (icmp ugt (udiv C2, X), C1) -> (icmp ule X, C2/(C1+1))
+      if (Pred == ICmpInst::ICMP_UGT)
+        return new ICmpInst(ICmpInst::ICMP_ULE, X,
+                            ConstantInt::get(X->getType(), C2.udiv(C1 + 1)));
+      // (icmp ult (udiv C2, X), C1) -> (icmp ugt X, C2/C1)
----------------
majnemer wrote:
> What if `C1` is `-1`?  Won't this divide by zero?
Ah, you have a test for this case, it is handled by InstSimplify.

Please add an assertion for this like you do for `C1 != 0` below.


http://reviews.llvm.org/D20123





More information about the llvm-commits mailing list