[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