| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 13264
|
|
|
|
|
|
| |
boxed-sim.
llvm-svn: 12358
|
|
|
|
| |
llvm-svn: 12264
|
|
|
|
| |
llvm-svn: 12208
|
|
|
|
|
|
|
| |
This reduces CBU time from 145s -> 122s (debug build), reduces # allocated nodes
from 129420 to 116477.
llvm-svn: 12125
|
|
|
|
|
|
|
|
| |
The problem was that we were merging a field of a node with a value that was
deleted. Thanks to bugpoint for reducing povray to a nice small 3 function
example. :)
llvm-svn: 12116
|
|
|
|
|
|
|
|
| |
This improves
povray from having ~600K nodes and 300K call nodes to 65K nodes and 25K call nodes.
llvm-svn: 12109
|
|
|
|
|
|
|
|
|
|
| |
forever to
do it on povray. The problem is that we were not copying globals from callees to
callers unless the existed in both graphs. We should have copied them in the case
where the global pointed to a node that was copied as well.
llvm-svn: 12104
|
|
|
|
| |
llvm-svn: 12102
|
|
|
|
|
|
|
|
| |
allocate
nodes that were globally live, thus breaking programs.
llvm-svn: 12094
|
|
|
|
| |
llvm-svn: 11928
|
|
|
|
| |
llvm-svn: 11864
|
|
|
|
|
|
| |
not have any globals.
llvm-svn: 11863
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Functions do not make things incomplete, only variables
2. Constant global variables no longer need to be marked incomplete, because
we are guaranteed that the initializer for the global will be in the
graph we are hacking on now. This makes resolution of indirect calls happen
a lot more in the bu pass, supports things like vtables and the C counterparts
(giant constant arrays of function pointers), etc...
Testcase here: test/Regression/Analysis/DSGraph/constant_globals.ll
llvm-svn: 11852
|
|
|
|
|
|
|
|
|
|
| |
Make the incompleteness marker faster by looping directly over the globals
instead of over the scalars to find the globals
Fix a bug where we didn't mark a global incomplete if it didn't have any
outgoing edges. This wouldn't break any current clients but is still wrong.
llvm-svn: 11848
|
|
|
|
|
|
|
|
|
| |
cheaper.
FIX MAJOR BUG, whereby we didn't merge null edges correctly. Correcting this
fixes poolallocation on 175.vpr, and possibly others.
llvm-svn: 11695
|
|
|
|
|
|
| |
correctly merged over!
llvm-svn: 11693
|
|
|
|
|
|
| |
getElementTypes() is gone.
llvm-svn: 11228
|
|
|
|
|
|
|
|
|
| |
removeDeadNodes is called, only call it at the end of the pass being run.
This saves 1.3 seconds running DSA on 177.mesa (5.3->4.0s), which is
pretty big. This is only possible because of the automatic garbage
collection done on forwarding nodes.
llvm-svn: 11178
|
|
|
|
|
|
|
|
|
| |
DSGraphs while they are forwarding. When the last reference to the forwarding
node is dropped, the forwarding node is autodeleted. This should simplify
removeTriviallyDead nodes, and is only (efficiently) possible because we are
using an ilist of dsnodes now.
llvm-svn: 11175
|
|
|
|
|
|
| |
G == 0
llvm-svn: 11174
|
|
|
|
| |
llvm-svn: 11173
|
|
|
|
| |
llvm-svn: 11171
|
|
|
|
|
|
|
| |
Rename stats from dsnode -> dsa
Add a new stat
llvm-svn: 11167
|
|
|
|
| |
llvm-svn: 11157
|
|
|
|
| |
llvm-svn: 11006
|
|
|
|
| |
llvm-svn: 11005
|
|
|
|
| |
llvm-svn: 11001
|
|
|
|
| |
llvm-svn: 11000
|
|
|
|
|
|
|
| |
moving it to the start of removeDeadNodes. This speeds up DSA by 2s on perlbmk
from 41s
llvm-svn: 10999
|
|
|
|
|
|
|
|
| |
function to find the globals, iterate over all of the globals directly. This
speeds the function up from 14s to 6.3s on perlbmk, reducing DSA time from
53->46s.
llvm-svn: 10996
|
|
|
|
|
|
| |
timers by default
llvm-svn: 10993
|
|
|
|
|
|
|
|
| |
This reduces the number of nodes allocated, then immediately merged and DNE'd
from 2193852 to 1298049. unfortunately this only speeds DSA up by ~1.5s (of
53s), because it's spending most of its time waddling through the scalar map :(
llvm-svn: 10992
|
|
|
|
|
|
| |
Also, use RC::merge when possible, reducing the number of nodes allocated, then immediately merged away from 2985444 to 2193852 on perlbmk.
llvm-svn: 10991
|
|
|
|
|
|
| |
You gotta love spurious
llvm-svn: 10990
|
|
|
|
| |
llvm-svn: 10989
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
it to be off. If it looks like it's completely unnecessary after testing, I
will remove it completely (which is the hope).
* Callers of the DSNode "copy ctor" can not choose to not copy links.
* Make node collapsing not create a garbage node in some cases, avoiding a
memory allocation, and a subsequent DNE.
* When merging types, allow two functions of different types to be merged
without collapsing.
* Use DSNodeHandle::isNull more often instead of DSNodeHandle::getNode() == 0,
as it is much more efficient.
*** Implement the new, more efficient reachability cloner class
In addition to only cloning nodes that are reachable from interesting
roots, this also fixes the huge inefficiency we had where we cloned lots
of nodes, only to merge them away immediately after they were cloned.
Now we only actually allocate a node if there isn't one to merge it into.
* Eliminate the now-obsolete cloneReachable* and clonePartiallyInto methods
* Rewrite updateFromGlobalsGraph to use the reachability cloner
* Rewrite mergeInGraph to use the reachability cloner
* Disable the scalar map scanning code in removeTriviallyDeadNodes. In large
SCC's, this is extremely expensive. We need a better data structure for the
scalar map, because we really want to scan the unique node handles, not ALL
of the scalars.
* Remove the incorrect SANER_CODE_FOR_CHECKING_IF_ALL_REFERRERS_ARE_FROM_SCALARMAP code.
* Move the code for eliminating integer nodes from the trivially dead
eliminator to the dead node eliminator.
* removeDeadNodes no longer uses removeTriviallyDeadNodes, as it contains a
superset of the node removal power.
* Only futz around with the globals graph in removeDeadNodes if it is modified
llvm-svn: 10987
|
|
|
|
|
|
| |
cloneReachableSubgraph, though this support is currently disabled.
llvm-svn: 10970
|
|
|
|
|
|
|
|
| |
map was only used to implement a marginal GlobalsGraph optimization, and it
actually slows the analysis down (due to the overhead of keeping it), so just
eliminate it entirely.
llvm-svn: 10955
|
|
|
|
| |
llvm-svn: 10954
|
|
|
|
| |
llvm-svn: 10953
|
|
|
|
|
|
|
|
|
|
|
| |
in terms of it.
Though clonePartiallyInto is not cloning partial graphs yet, this change
dramatically speeds up inlining of graphs with many scalars. For example,
this change speeds up the BU pass on 253.perlbmk from 69s to 36s, because
it avoids iteration over the scalar map, which can get pretty large.
llvm-svn: 10951
|
|
|
|
| |
llvm-svn: 9948
|
|
|
|
| |
llvm-svn: 9922
|
|
|
|
| |
llvm-svn: 9913
|
|
|
|
| |
llvm-svn: 9903
|
|
|
|
| |
llvm-svn: 9895
|
|
|
|
| |
llvm-svn: 9880
|
|
|
|
|
|
|
|
| |
used to eliminate the hard coded, hacked in, sparc specific, global TargetData.
Changing the TargetData used to actually match the code fixes problems, and
eliminates a crash.
llvm-svn: 9659
|
|
|
|
| |
llvm-svn: 9658
|