[InstCombine] Fold icmp eq/ne (and %x, signbit), 0 -> %x s>=/s< 0 earlier
authorHuihui Zhang <huihuiz@quicinc.com>
Wed, 19 Jun 2019 17:31:39 +0000 (17:31 +0000)
committerHuihui Zhang <huihuiz@quicinc.com>
Wed, 19 Jun 2019 17:31:39 +0000 (17:31 +0000)
commit3104139a5ba4bccd13dde463032c69c6e8500ada
tree31705054c5ba0995e2196b89a7a1d9c24a3a7818
parentf9309e39c368931e5aae7bf484d9074b5c654f65
[InstCombine] Fold  icmp eq/ne (and %x, signbit), 0 -> %x s>=/s< 0  earlier

Summary:
To generate simplified IR, make sure fold
```
  (X & signbit) ==/!= 0) -> X s>=/s< 0;
```
is scheduled before fold
```
  ((X << Y) & C) == 0 -> (X & (C >> Y)) == 0.
```

https://rise4fun.com/Alive/fbdh

Reviewers: lebedev.ri, efriedma, spatel, craig.topper

Reviewed By: lebedev.ri

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63026

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363845 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineCompares.cpp
test/Transforms/InstCombine/lshr-and-signbit-icmpeq-zero.ll
test/Transforms/InstCombine/shl-and-signbit-icmpeq-zero.ll