| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 297047
|
|
|
|
| |
llvm-svn: 297046
|
|
|
|
|
|
| |
NFC.
llvm-svn: 296935
|
|
|
|
| |
llvm-svn: 296665
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Depends on D29606 and D29682
Makes us pass GVN's edge.ll (we also will pass a few other testcases
they just need cleaning up).
Thoughts on the Predicate* hiearchy of classes especially welcome :)
(it's not clear to me how best to organize it, and currently, the getBlock* seems ... uglier than maybe wasting a field somewhere or something).
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29747
llvm-svn: 295889
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: This begins using the predicateinfo pass in NewGVN.
Reviewers: davide
Subscribers: llvm-commits, Prazek
Differential Revision: https://reviews.llvm.org/D29682
llvm-svn: 295583
|
|
|
|
|
|
| |
shouldSwapOperands to be correct.
llvm-svn: 295582
|
|
|
|
| |
llvm-svn: 295503
|
|
|
|
| |
llvm-svn: 295500
|
|
|
|
|
|
| |
deadness
llvm-svn: 294926
|
|
|
|
| |
llvm-svn: 294925
|
|
|
|
|
|
| |
This reverts commit r294919
llvm-svn: 294923
|
|
|
|
| |
llvm-svn: 294922
|
|
|
|
| |
llvm-svn: 294920
|
|
|
|
| |
llvm-svn: 294919
|
|
|
|
| |
llvm-svn: 294851
|
|
|
|
| |
llvm-svn: 294850
|
|
|
|
| |
llvm-svn: 294849
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
it is dead or unreachable, as it should be.
This also makes the leader of INITIAL undef, enabling us to handle
irreducibility properly.
Summary:
This lets us verify, more than we do now, that we didn't screw up
value numbering.
Reviewers: davide
Subscribers: Prazek, llvm-commits
Differential Revision: https://reviews.llvm.org/D29842
llvm-svn: 294844
|
|
|
|
| |
llvm-svn: 294837
|
|
|
|
| |
llvm-svn: 293708
|
|
|
|
| |
llvm-svn: 293707
|
|
|
|
| |
llvm-svn: 293706
|
|
|
|
| |
llvm-svn: 293705
|
|
|
|
| |
llvm-svn: 293704
|
|
|
|
| |
llvm-svn: 293703
|
|
|
|
|
|
| |
will turn into unreachable when it runs
llvm-svn: 293515
|
|
|
|
|
|
|
|
|
| |
This reverts commit r293196
Besides making things look nicer, ATM, we'd like to preserve analysis
more than we'd like to destroy the CFG. We'll probably revisit in the future
llvm-svn: 293501
|
|
|
|
| |
llvm-svn: 293428
|
|
|
|
|
|
|
|
| |
It is, in fact, unused. Found while reviewing Danny's new
SSAUpdater and porting passes to it to see how the new API
looked like.
llvm-svn: 293407
|
|
|
|
| |
llvm-svn: 293260
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This adds basic dead and redundant store elimination to
NewGVN. Unlike our current DSE, it will happily do cross-block DSE if
it meets our requirements.
We get a bunch of DSE's simple.ll cases, and some stuff it doesn't.
Unlike DSE, however, we only try to eliminate stores of the same value
to the same memory location, not just general stores to the same
memory location.
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29149
llvm-svn: 293258
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This does not actually fix the testcase in PR31761 (discussion is
ongoing on the testcase), but does fix a bug it exposes, where stores
were not properly clobbering loads.
We accomplish this by unifying the memory equivalence infratructure
back into the normal congruence infrastructure, and then properly
destroying congruence classes when memory state leaders disappear.
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29195
llvm-svn: 293216
|
|
|
|
| |
llvm-svn: 293212
|
|
|
|
| |
llvm-svn: 293196
|
|
|
|
|
|
|
|
| |
Otherwise we ask for a domtree node that's not there, and we crash.
Differential Revision: https://reviews.llvm.org/D29145
llvm-svn: 293122
|
|
|
|
| |
llvm-svn: 293112
|
|
|
|
|
|
|
|
|
|
|
| |
Don't call `isTriviallyDeadInstructions()` once we discover that
an instruction is dead. Instead, set DFS number zero (as suggested
by Danny) and forget about it (this also speeds up things as we
won't try to reprocess that block).
Differential Revision: https://reviews.llvm.org/D28930
llvm-svn: 292676
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This rewrites store expression/leader handling. We no longer use the
value operand as the leader, instead, we store it separately. We also
now store the stored value as part of the expression, and compare it
when comparing stores for equality. This enables us to get rid of a
bunch of our previous hacks and machinations, as the existing
machinery takes care of everything *except* updating the stored value
on classes. The only time we have to update it is if the storecount
goes to 0, and when we do, we destroy it.
Since we no longer use the value operand as the leader, during elimination, we have to use the value operand. Doing this also fixes a bunch of store forwarding cases we were missing.
Any value operand we use is guaranteed to either be updated by previous eliminations, or minimized by future ones.
(IE the fact that we don't use the most dominating value operand when it's not a constant does not affect anything).
Sadly, this change also exposes that we didn't pay attention to the
output of the pr31594.ll test, as it also very clearly exposes the
same store leader bug we are fixing here.
(I added pr31682.ll anyway, but maybe we think that's too large to be useful)
On the plus side, propagate-ir-flags.ll now passes due to the
corrected store forwarding.
This change was 3 stage'd on darwin and linux, with the full test-suite.
Reviewers:
davide
Subscribers:
llvm-commits
llvm-svn: 292648
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 292583
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D28842
llvm-svn: 292421
|
|
|
|
|
|
| |
should not be creating new entries
llvm-svn: 292059
|
|
|
|
|
|
|
| |
Patch by Gonsolo.
Differential Revision: https://reviews.llvm.org/D28731
llvm-svn: 292031
|
|
|
|
| |
llvm-svn: 292026
|
|
|
|
| |
llvm-svn: 292025
|
|
|
|
| |
llvm-svn: 291981
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dominating leader. Fixes PR 31613.
Summary:
This is a testcase where phi node cycling happens, and because we do
not order the leaders by domination or anything similar, the leader
keeps changing.
Using std::set for the members is too expensive, and we actually don't
need them sorted all the time, only at leader changes.
We could keep both a set and a vector, and keep them mostly sorted and
resort as necessary, or use a set and a fibheap, but all of this seems
premature.
After running some statistics, we are able to avoid the vast majority
of sorting by keeping a "next leader" field. Most congruence classes only have
leader changes once or twice during GVN.
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28594
llvm-svn: 291968
|
|
|
|
|
|
|
|
|
|
|
|
| |
It was always zero. When we move a store from `initial` to its
own congruency class, we end up with a negative store count, which
is obviously wrong.
Also, while here, change StoreCount to be signed so that the assertions
actually fire.
Ack'ed by Daniel Berlin.
llvm-svn: 291725
|
|
|
|
|
|
| |
It's breaking some bots. Will investigate and recommit.
llvm-svn: 291712
|
|
|
|
|
|
| |
Format an assertion message while I'm here.
llvm-svn: 291710
|