Commit Graph

12 Commits

Author SHA1 Message Date
Sanjay Patel
16c5e12d3a [InstCombine] if the condition of a select may be known via assumes, eliminate the select
This is a limited solution for PR31512:
https://llvm.org/bugs/show_bug.cgi?id=31512

The motivation is that we will need to increase usage of llvm.assume and/or metadata to solve PR28430:
https://llvm.org/bugs/show_bug.cgi?id=28430

...and this kind of simplification is needed to take advantage of that extra information.

The 'not' test case would be handled by:
https://reviews.llvm.org/D28485

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291915 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 17:02:42 +00:00
Sanjay Patel
157c03acff [InstSimplify] add tests to show missing select simplifications; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291043 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 00:40:52 +00:00
Sanjay Patel
366a2caf93 [InstSimplify] don't crash handling a pointer or aggregate type
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276345 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 21:56:00 +00:00
Sanjay Patel
32995b5eb3 [InstSimplify] recognize trunc + icmp sgt/slt variants of select simplifications (PR28466)
rL245171 exposed a hole in InstSimplify that manifested in a strange way in PR28466:
https://llvm.org/bugs/show_bug.cgi?id=28466

It's possible to use trunc + icmp sgt/slt in place of an and + icmp eq/ne, so we need to
recognize that pattern to eliminate selects that are choosing between some value and some
bitmasked version of that value.

Note that there is significant room for improvement (refactoring) and enhancement (more
patterns, possibly in InstCombine rather than here).

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276341 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 21:26:45 +00:00
Sanjay Patel
d1938d1914 add vector tests and a simpler version of the negative tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276328 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 20:11:08 +00:00
Sanjay Patel
4c8b3b4588 [InstSimplify][InstCombine] don't crash when folding vector selects of icmp
Differential Revision: https://reviews.llvm.org/D22602


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276209 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-20 23:40:01 +00:00
Sanjay Patel
5f33cbe2bf add even more missing tests for simplifySelectBitTest()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276024 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-19 20:47:00 +00:00
Sanjay Patel
d9f3c5ebc0 add tests related to PR28466
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275995 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-19 17:07:35 +00:00
Sanjay Patel
779845c3ce add missing test for simplifySelectBitTest()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275990 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-19 16:49:55 +00:00
Sanjay Patel
52f3fd0660 auto-generate checks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275899 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-18 20:06:51 +00:00
David Majnemer
9cd99a0724 InstSimplify: Optimize away pointless comparisons
(X & INT_MIN) ? X & INT_MAX : X  into  X & INT_MAX
(X & INT_MIN) ? X : X & INT_MAX  into  X
(X & INT_MIN) ? X | INT_MIN : X  into  X
(X & INT_MIN) ? X : X | INT_MIN  into  X | INT_MIN

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224669 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-20 03:04:38 +00:00
David Majnemer
f45536e75e InstSimplify: Restore optimizations lost in r210006
This restores our ability to optimize:
(X & C) ? X & ~C : X  into  X & ~C
(X & C) ? X : X & ~C  into  X
(X & C) ? X | C : X  into  X
(X & C) ? X : X | C  into  X | C

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222868 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-27 06:32:46 +00:00