Commit Graph

16950 Commits

Author SHA1 Message Date
Daniel Berlin
a0431ff170 NewGVN: Fix PR 31682, an overactive assert.
Part of the assert has been left active for further debugging.
The other part has been turned into a stat for tracking for the
moment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292583 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-20 06:38:41 +00:00
Dehao Chen
3d22724c85 clang-format SampleProfile.cpp (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292533 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 23:20:31 +00:00
Davide Italiano
2037eb7f15 [SCCP] Teach the pass how to handle div with overdefined operands.
This can prove that:

extern int f;
int g() {
    int x = 0;
    for (int i = 0; i < 365; ++i) {
        x /= f;
    }
    return x;
}

always returns zero. Thanks to Sanjoy for confirming this
transformation actually made sense (bugs are mine).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292531 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 23:07:51 +00:00
Davide Italiano
f3e9b57b20 [SCCP] Update comment in visitBinaryOp() after recent changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292519 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 21:07:42 +00:00
Xin Tong
9e142cd03c Improve what can be promoted in LICM.
Summary:
In case of non-alloca pointers, we check for whether it is a pointer
from malloc-like calls and it is not captured. In such case, we can
promote the pointer, as the caller will have no way to access this pointer
even if there is unwinding in middle of the loop.

Reviewers: hfinkel, sanjoy, reames, eli.friedman

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292510 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 19:31:40 +00:00
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
Mikael Holmen
02d931bc7d Test commit access, remove trailing whitespace
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292482 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 13:35:13 +00:00
Peter Collingbourne
3a89c350b8 LowerTypeTests: Implement exporting of type identifiers.
Type identifiers are exported by:
- Adding coarse-grained information about how to test the type
  identifier to the summary.
- Creating symbols in the object file (aliases and absolute symbols)
  containing fine-grained information about the type identifier.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292462 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 01:20:11 +00:00
Michael Kuperstein
b9ac5dc04e [LV] Run loop-simplify and LCSSA explicitly instead of "requiring" them
This changes the vectorizer to explicitly use the loopsimplify and lcssa utils,
instead of "requiring" the transformations as if they were analyses.

This is not NFC, since it changes the LCSSA behavior - we no longer run LCSSA
for all loops, but rather only for the loops we expect to modify.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292456 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 00:42:28 +00:00
Eli Friedman
e3502119ae Preserve domtree and loop-simplify for runtime unrolling.
Mostly straightforward changes; we just didn't do the computation before.
One sort of interesting change in LoopUnroll.cpp: we weren't handling
dominance for children of the loop latch correctly, but
foldBlockIntoPredecessor hid the problem for complete unrolling.

Currently punting on loop peeling; made some minor changes to isolate
that problem to LoopUnrollPeel.cpp.

Adds a flag -unroll-verify-domtree; it verifies the domtree immediately
after we finish updating it. This is on by default for +Asserts builds.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292447 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 23:26:37 +00:00
Sanjay Patel
82823ef719 [InstCombine] add an assert to make a shl+icmp transform assumption explicit; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292440 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 21:16:12 +00:00
Sanjay Patel
a1c9212c46 [InstCombine] remove a redundant check; NFCI
I missed deleting this check when I refactored this chunk in:
https://reviews.llvm.org/rL292260


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292433 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 20:09:59 +00:00
Peter Collingbourne
28f35758a5 ThinLTOBitcodeWriter: Clear comdats on filtered globals.
Differential Revision: https://reviews.llvm.org/D28839

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292431 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 20:03:02 +00:00
Peter Collingbourne
1d08431d77 Cloning: Copy comdats when cloning globals.
Differential Revision: https://reviews.llvm.org/D28838

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292430 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 20:02:31 +00:00
Michael Kuperstein
517331b4f0 Fix up a comment. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292425 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 19:05:48 +00:00
Michael Kuperstein
c3a226d450 [LV] Allow reductions that have several uses outside the loop
We currently check whether a reduction has a single outside user. We don't
really need to require that - we just need to make sure a single value is
used externally. The number of external users of that value shouldn't actually
matter.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292424 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 19:02:52 +00:00
Davide Italiano
d20f95e583 [NewGVN] We don't use postdom info anymore. Update.
Differential Revision:  https://reviews.llvm.org/D28842

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292421 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 18:42:28 +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
caaf153fef [InstCombine] Remove unnecessary intrinsics demanded elts handling
As discussed on D28777 - we don't need to handle 'all element' shuffles inside InstCombiner::visitCallInst as InstCombiner::SimplifyDemandedVectorElts will do everything we need.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292365 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 13:44:04 +00:00
Chandler Carruth
3b7e6728dc [LoopDeletion] (cleanup, NFC) Fix one more local variable that didn't
follow LLVM's naming conventions while I'm here.

Again, sorry I didn't spot this earlier to coalesce with other cleanup
changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292333 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 02:43:01 +00:00
Chandler Carruth
02f541f2f5 [PM] Teach LoopDeletion to correctly update the LPM when loops are
deleted.

I've expanded its test coverage a bit including adding one test that
will crash clearly without this change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292332 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 02:41:26 +00:00
Eugene Zelenko
13bc67e541 [Target, Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292320 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 00:57:48 +00:00
Xin Tong
9256b5bcb4 Skip loop header while we can when computing loop safety info
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292310 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 00:15:11 +00:00
Dehao Chen
f519872cb6 Introduce -unroll-partial-threshold to separate PartialThreshold from Threshold in loop unorller.
Summary: Partial unrolling should have separate threshold with full unrolling.

Reviewers: efriedma, mzolotukhin

Reviewed By: efriedma, mzolotukhin

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292293 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 23:39:33 +00:00
Chandler Carruth
1d3f42922c [LoopDeletion] (cleanup, NFC) Use the dedicated helper to get a single
unique exit block if available rather than rolling it ourselves.

This is a little disappointing because that helper doesn't do anything
clever to short-circuit the (surprisingly expensive) computation of all
exit blocks. What's worse is that the way we compute this is hopelessly,
hilariously inefficient. We're literally computing the same information
two different ways and multiple times each way:
- hasDedicatedExits computes the exit block set and then looks at the
  predecessors of each
- getExitingBlocks computes the set of loop blocks which have exiting
  successors
- getUniqueExitBlock(s) computes the set of non-loop blocks reached from
  loop blocks (sound familiar?)

Anyways, at some point we should clean all of this up in the LoopInfo
API, but for now just simplifying the user I'm about to touch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292282 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 22:28:52 +00:00
Chandler Carruth
57a16bcd94 [LoopDeletion] (cleanup, NFC) Fix another variable name to match LLVM
conventions, missed this one in a previous cleanup patch (sorry).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292279 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 22:19:56 +00:00
Chandler Carruth
ebd934178e [LoopDeletion] (cleanup, NFC) Remove a pointless comment.
I hope that for any code, it is changed only with good reason and only
when the author knows what they are doing...

There is of course good reason to comment here about the subtlety of the
process, and I've left that comment in tact.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292275 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 22:09:28 +00:00
Chandler Carruth
70e0d713b2 [LoopDeletion] (cleanup, NFC) Make simple helper functions static
instead of members.

No state was being provided by the object so this seems strictly
simpler.

I've also tried to improve the name and comments for the functions to
more thoroughly document what they are doing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292274 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 22:07:26 +00:00
Chandler Carruth
40d8cc12dd [LoopDeletion] (cleanup, NFC) Stop passing around reference to a vector
that we know has exactly one element when all we are going to do is get
that one element out of it.

Instead, pass around that one element.

There are more simplifications to come in this code...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292273 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 22:00:52 +00:00
Chandler Carruth
067ba90db4 [PM] Clean up variable and parameter names to match modern LLVM naming
conventions more conistently before hacking on this code to integrate
nicely with new PM's loop pass infrastructure. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292272 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 21:51:39 +00:00
Sanjay Patel
eaad74d604 [InstCombine] refactor foldICmpShlConstant(); NFCI
This reduces the size of and increases the symmetry with the planned functional change in:
https://reviews.llvm.org/D28406


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292260 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 21:25:16 +00:00
Matthew Simpson
caab3a817f [LV] Mark non-consecutive-like pointers non-uniform
If a memory instruction will be vectorized, but it's pointer operand is
non-consecutive-like, the instruction is a gather or scatter operation. Its
pointer operand will be non-uniform. This should fix PR31671.

Reference: https://llvm.org/bugs/show_bug.cgi?id=31671
Differential Revision: https://reviews.llvm.org/D28819

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292254 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 20:51:39 +00:00
Dan Gohman
c67238a892 [WebAssembly] Add triple support for the new wasm object format
Differential Revision: https://reviews.llvm.org/D26701


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292252 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 20:34:09 +00:00
Sanjoy Das
90b7e38b05 [EarlyCSE] 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/D28741

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292249 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 20:15:47 +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
Sanjay Patel
a9edfbaac4 [InstCombine] reduce indent; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292230 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-17 16:59:09 +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
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
Sanjay Patel
4ee9281ee4 [InstCombine] use m_APInt instead of faking it
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292164 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 21:24:41 +00:00
Sanjay Patel
627c8074e7 [InstCombine] fix names in canEvaluateShiftedShift(); NFC
It's not clear what 'First' and 'Second' mean, so use 'Inner' and 'Outer'
to match foldShiftedShift() and add comments with formulas, so it's easier
to see what's going on.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292153 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 20:05:26 +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
0f258723e9 [InstCombine] refactor shift-of-shift folds; NFCI
Reduces code duplication and makes it easier to extend these folds for vectors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292145 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 17:27:50 +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
50a13b4047 [InstCombine] fix formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292073 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 17:55:35 +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
Daniel Berlin
c110f9b676 NewGVN: Change a bunch of densemap find_or_creates to lookups, since they should not be creating new entries
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292059 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 09:18:41 +00:00