Davide Italiano
02d80d355e
[InstCombine] Simplify gep (gep p, a), (b-a)
...
Patch by Andrea Canciani.
Differential Revision: https://reviews.llvm.org/D27413
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292506 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 18:51:56 +00:00
Sanjay Patel
d942fa6726
[InstCombine] icmp Pred (shl nsw X, C1), C0 --> icmp Pred X, C0 >> C1
...
Try harder to fold icmp with shl nsw as discussed here:
http://lists.llvm.org/pipermail/llvm-dev/2017-January/108749.html
This is similar to the 'shl nuw' transforms that were added with D25913.
This may eventually help solve:
https://llvm.org/bugs/show_bug.cgi?id=30773
Differential Revision: https://reviews.llvm.org/D28406
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292492 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 16:12:10 +00:00
Sanjay Patel
4683557a5f
[InstCombine] add tests for shl nsw with icmp eq/ne; NFCI
...
These should be fixed with D28406.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292441 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 21:31:21 +00:00
Simon Pilgrim
c2e261218f
[InstCombine][AVX2] Add DemandedElts support for VPERMD/VPERMPS shuffles
...
Simplify a vpermv shuffle mask based on the elements of the mask that are actually demanded.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292371 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 14:47:49 +00:00
Simon Pilgrim
e22dda95c0
[InstCombine][AVX2] Tests showing missed opportunities to pass demanded elts through a vpermd/vpermps shuffle
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292368 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 14:23:06 +00:00
Sanjay Patel
bf51c92663
[InstCombine] add tests to show missed shrinkage; NFC
...
A patch to partially solve this:
https://reviews.llvm.org/D28625
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292296 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 00:03:23 +00:00
Sanjay Patel
e9d3b46a1d
[InstCombine] add tests for shl nsw + icmp sle; NFC
...
We want to handle these cases similarly to icmp sgt, so add the tests for it.
See: https://reviews.llvm.org/D28406
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292248 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 20:15:26 +00:00
Sanjay Patel
3ecd20b357
[ValueTracking] recognize a 'not' of an assumed condition as false
...
Also, add the corresponding match to the AssumptionCache's 'Affected Values' list.
Differential Revision: https://reviews.llvm.org/D28485
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292239 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 18:15:49 +00:00
David Majnemer
64f84982ee
[InstCombine] Fold ((C1 OP zext(X)) & C2) -> zext((C1 OP X) & C2)
...
This further extends r292179 to support additional binary operators
beyond subtraction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292238 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 18:08:06 +00:00
Chad Rosier
7eb6751ff6
[ValueTracking] Extend known bits to understand @llvm.bitreverse.
...
Differential Revision: https://reviews.llvm.org/D28780
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292233 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 17:23:51 +00:00
Simon Pilgrim
04f56107c5
[InstCombine][X86][AVX] Add DemandedElts support for VPERMILPD/VPERMILPS instructions
...
Simplify a vpermilvar shuffle mask based on the elements of the mask that are actually demanded.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292209 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 11:35:03 +00:00
Sanjoy Das
4b48551490
[InstCombine] Don't DSE across readnone functions that may throw
...
Summary: Depends on D28740
Reviewers: dberlin, chandlerc, hfinkel, majnemer
Subscribers: mcrosier, llvm-commits
Differential Revision: https://reviews.llvm.org/D28742
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292197 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 05:45:09 +00:00
David Majnemer
4b66daa8cc
[InstCombine] Fold ((C1-zext(X)) & C2) -> zext((C1-X) & C2)
...
This is valid if C2 fits within the bitwidth of X thanks to two's
complement modulo arithmetic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292179 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 00:45:57 +00:00
Matt Arsenault
3802a656d3
Add comment to test file I forgot to save
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292178 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 00:35:28 +00:00
Matt Arsenault
3bd79e8a80
SimplifyLibCalls: Remove checks for fabs
...
Use the intrinsic instead of emitting the libcall which
will be replaced by the intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292176 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 00:30:31 +00:00
Matt Arsenault
5276f9a934
SimplifyLibCalls: Replace fabs libcalls with intrinsics
...
Add missing fabs(fpext) optimzation that worked with the call,
and also fixes it creating a second fpext when there were multiple
uses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292172 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 00:10:40 +00:00
Simon Pilgrim
663d71421c
[InstCombine][AVX] Tests showing missed opportunities to pass demanded elts through a permilpd/permilps shuffle mask
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292165 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 21:34:22 +00:00
Sanjay Patel
2222ec4bc9
[InstCombine] use m_APInt to allow shift-shift folds for vectors with splat constants
...
Some existing 'FIXME' tests are still not folded because of splat holes in value tracking.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292151 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 19:35:45 +00:00
Sanjay Patel
63bb8f30ce
[InstCombine] add tests to show missed vector folds; NFC
...
The shift-shift possibilities became easier to see after:
https://reviews.llvm.org/rL292145
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292150 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 19:23:34 +00:00
Simon Pilgrim
50d76a80ed
[InstCombine][SSE] Tests showing missed opportunities to pass demanded elts through a packss/packus truncation
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292144 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 17:26:23 +00:00
Simon Pilgrim
07d3c0f01c
[InstCombine][SSE] Add DemandedElts support for PSHUFB instructions
...
Simplify a pshufb shuffle mask based on the elements of the mask that are actually demanded.
Differential Revision: https://reviews.llvm.org/D28745
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292101 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 11:30:41 +00:00
Sanjay Patel
5ec1d71357
[InstCombine] add tests to show missed vector folds; NFC
...
Also, add comments and remove bogus comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292082 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 23:45:03 +00:00
Simon Pilgrim
4354d8859a
[InstCombine][SSE] Tests showing missed opportunities to pass demanded elts through a pshufb shuffle mask
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292072 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 17:49:04 +00:00
Sanjay Patel
f6be6abb81
[InstCombine] use m_APInt to allow ashr folds for vectors with splat constants
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292064 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 16:38:19 +00:00
Sanjay Patel
b41dc00dd6
[InstCombine] add explanatory comments to tests; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292063 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 16:22:26 +00:00
Chandler Carruth
340ad683c8
[PM] Fix instcombine's analysis preservation in the new pass manager to
...
cover domtree and alias analysis. These are the pretty clear analyses
that we would always want to survive this pass.
To make these survive, we also need to preserve the assumption cache.
Added a test that verifies the important bits of this preservation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292037 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 23:25:22 +00:00
Sanjay Patel
1849414f3e
[InstCombine] add test to show missed vector fold; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292035 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 23:12:29 +00:00
Sanjay Patel
3d039197d7
[InstCombine] optimize unsigned icmp of increment
...
Allows LLVM to optimize sequences like the following:
%add = add nuw i32 %x, 1
%cmp = icmp ugt i32 %add, %y
Into:
%cmp = icmp uge i32 %x, %y
Previously, only signed comparisons were being handled.
Decrements could also be handled, but 'sub nuw %x, 1' is currently canonicalized to
'add %x, -1' in InstCombineAddSub, losing the nuw flag. Removing that canonicalization
seems like it might have far-reaching ramifications so I kept this simple for now.
Patch by Matti Niemenmaa!
Differential Revision: https://reviews.llvm.org/D24700
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291975 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 23:25:46 +00:00
Sanjay Patel
534e635d1b
[InstCombine] use m_APInt to allow lshr folds for vectors with splat constants
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291972 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 23:04:10 +00:00
Sanjay Patel
e71a092ac9
[InstCombine / InstSimplify] add and move tests for lshr transforms; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291970 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 22:54:12 +00:00
Sanjay Patel
093d956dc6
[InstCombine] use m_APInt to allow shl folds for vectors with splat constants
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291934 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 18:39:09 +00:00
Sanjay Patel
19e50b839a
[InstCombine] add tests to show missing transforms for vector shl; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291926 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 18:27:23 +00:00
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
Matt Arsenault
1f4353fb62
InstSimplify: Eliminate fabs on known positive
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291624 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-11 00:33:24 +00:00
Matt Arsenault
3aa9c7e336
InstCombine: fdiv -x, -y -> fdiv x, y
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291611 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-10 23:08:54 +00:00
Davide Italiano
b614cd308d
[SimplifyLibCalls] Propagate fast math flags while optimizing pow().
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291577 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-10 18:02:05 +00:00
Davide Italiano
3cb206f57f
[SimplifyLibCalls] pow(x, -0.5) -> 1.0 / sqrt(x).
...
Differential Revision: https://reviews.llvm.org/D28479
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291486 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 21:55:23 +00:00
Sanjay Patel
65d1e15e7c
[InstCombine] add test to show missed fold using llvm.assume; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291472 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 20:18:30 +00:00
Sanjay Patel
fe1696d23d
[InstCombine] regenerate checks; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291469 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 19:43:26 +00:00
Sanjay Patel
fdda3fb770
[InstCombine] regenerate checks; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291464 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 19:18:46 +00:00
Sanjay Patel
99555b7a44
[InstCombine] remove unnecessary attribute comments from test files; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291463 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 19:13:38 +00:00
Matt Arsenault
071eccb255
SimplifyLibCalls: Remove incorrect optimization of fabs
...
fabs(x * x) is not generally safe to assume x is positive if x is a NaN.
This is also less general than it could be, so this will be replaced
with a transformation on the intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291359 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 19:55:12 +00:00
David Majnemer
ef654a7ee6
[InstSimplify] Optimize away urems in the presence of range metadata
...
We know that urem %V, C can be optimized away to %V if %V is ult C.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291282 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 21:23:51 +00:00
Sanjay Patel
e760878a95
[InstCombine] add a vector version of a test added in r291262; NFC
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291265 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 19:14:05 +00:00
Sanjay Patel
6435c8a3b0
[InstCombine] move and add tests for icmp + shl nsw; NFC
...
As discussed here:
http://lists.llvm.org/pipermail/llvm-dev/2017-January/108749.html
...we should be able to better optimize this pattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291262 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 18:57:54 +00:00
Matt Arsenault
6c6903a8c4
InstCombine: Fold cos(-x) -> cos(x)
...
Also cos(fabs(x)) -> cos(x)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291022 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 22:49:03 +00:00
David Majnemer
cc80c5c073
[InstCombine] Add a test for r290733
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290929 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 02:21:37 +00:00
David Majnemer
7f769abef4
[InstCombine] Move casts around shift operations
...
It is possible to perform a left shift before zero extending if the
shift would only shift out zeros.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290928 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 02:21:34 +00:00
David Majnemer
7a2e65f6d7
[InstCombine] Combine adds across a zext
...
We can perform the following:
(add (zext (add nuw X, C1)), C2) -> (zext (add nuw X, C1+C2))
This is only possible if C2 is negative and C2 is greater than or equal to negative C1.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290927 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 02:21:31 +00:00
Matt Arsenault
d0222fed31
InstCombine: Fold fabs on select of constants
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290913 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-03 22:40:34 +00:00