[PATCH] D143883: [InstCombine] canonicalize urem as cmp+select

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 16 04:09:11 PST 2023


nikic added inline comments.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp:1793-1794
+        simplifyICmpInst(ICmpInst::ICMP_ULT, X, Op1, SQ.getWithInstruction(&I));
+    if (auto *CVal = dyn_cast_or_null<Constant>(Val))
+      if (CVal->isOneValue()) {
+        Value *FrozenX = Builder.CreateFreeze(Op0, Op0->getName() + ".frozen");
----------------
Use `match(Val, m_One())` instead?


================
Comment at: llvm/test/Transforms/InstCombine/urem-via-cmp-select.ll:24
+; https://alive2.llvm.org/ce/z/uo7HMz
+define noundef i64 @urem_assume_without_nuw(i64 noundef %x, i64 noundef %n) {
+; CHECK-LABEL: @urem_assume_without_nuw(
----------------
Drop noundef attributes


================
Comment at: llvm/test/Transforms/InstCombine/urem-via-cmp-select.ll:77
+
+declare void @llvm.assume(i1 noundef)
----------------
Missing tests where add constant is not 1.

It would be good to also have a test that is not based on assume, where `%x < %n` is known through some other way instead.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143883/new/

https://reviews.llvm.org/D143883



More information about the llvm-commits mailing list