[PATCH] D66232: [InstCombine] Try to reuse constant from select in leading comparison

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 23 08:07:08 PDT 2019


lebedev.ri added inline comments.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp:1297-1300
+  // If the comparison is a sign-test, don't touch it.
+  // FIXME: are there more magic values we must not touch?
+  if (ICmpInst::isSigned(Pred) && C0->isNullValue())
+    return nullptr;
----------------
spatel wrote:
> Is this check to avoid an infinite loop or some other reason?
> 
> It seems strange that we need only that specific check. Maybe this should re-use this code from InstCombineCompares.cpp:
>   static bool isSignTest(ICmpInst::Predicate &Pred, const APInt &C)
> 
> or llvm::decomposeBitTestICmp()?
> 
> If I'm seeing it correctly, we would transform this case (and that's ok?):
>   define i32 @x_is_not_negative(i32 %x, i32 %y) {
>     %t = icmp sgt i32 %x, -1
>     %r = select i1 %t, i32 0, i32 %y
>     ret i32 %r
>   }
> 
> Is this check to avoid an infinite loop?

Initially - yes.
But weird, if i drop that check the original testcase no longer hangs.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D66232





More information about the llvm-commits mailing list