| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 20759
|
| |
|
|
|
|
| |
passing it.
llvm-svn: 20758
|
| |
|
|
|
|
| |
this identity merge.
llvm-svn: 20755
|
| |
|
|
| |
llvm-svn: 20754
|
| |
|
|
| |
llvm-svn: 20751
|
| |
|
|
| |
llvm-svn: 20748
|
| |
|
|
| |
llvm-svn: 20741
|
| |
|
|
| |
llvm-svn: 20732
|
| |
|
|
|
|
| |
the merge has more operands than the LHS.
llvm-svn: 20731
|
| |
|
|
| |
llvm-svn: 20716
|
| |
|
|
| |
llvm-svn: 20710
|
| |
|
|
|
|
| |
old methods.
llvm-svn: 20707
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to tell apart anyway, and only track the leader for of these equivalence
classes in our graphs.
This dramatically reduces the number of GlobalValue*'s that appear in scalar
maps, which A) reduces memory usage, by eliminating many many scalarmap entries
and B) reduces time for operations that need to execute an operation for each
global in the scalar map.
As an example, this reduces the memory used to analyze 176.gcc from 1GB to
511MB, which (while it's still way too much) is better because it doesn't hit
swap anymore. On eon, this shrinks the local graphs from 14MB to 6.8MB,
shrinks the bu+td graphs of povray from 50M to 40M, shrinks the TD graphs of
130.li from 8.8M to 3.6M, etc.
This change also speeds up DSA on large programs where this makes a big
difference. For example, 130.li goes from 1.17s -> 0.56s, 134.perl goes
from 2.14 -> 0.93s, povray goes from 15.63s->7.99s (!!!).
This also apparently either fixes the problem that caused DSA to crash on
perlbmk and gcc, or it hides it, because DSA now works on these. These
both take entirely too much time in the TD pass (147s for perl, 538s for
gcc, vs 7.67/5.9s in the bu pass for either one), but this is a known
problem that I'll deal with later.
llvm-svn: 20696
|
| |
|
|
|
|
|
| |
graph, and the combination of a function that does not reference globals, takes
not arguments and returns no value is pretty rare.
llvm-svn: 20670
|
| |
|
|
| |
llvm-svn: 20668
|
| |
|
|
| |
llvm-svn: 20660
|
| |
|
|
|
|
| |
This speeds up the BU pass on 172.mgrid from 62.3 -> 0.1242s.
llvm-svn: 20648
|
| |
|
|
| |
llvm-svn: 20643
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
{ short, short }
to
short
where the second short maps onto the second field of the first struct. In
this case, the struct index is not aligned, so we should avoid calling
getLink(2), which asserts out.
llvm-svn: 20626
|
| |
|
|
| |
llvm-svn: 20622
|
| |
|
|
| |
llvm-svn: 20618
|
| |
|
|
|
|
|
|
| |
using Function::arg_{iterator|begin|end}. Likewise Module::g* -> Module::global_*.
This patch is contributed by Gabor Greif, thanks!
llvm-svn: 20597
|
| |
|
|
| |
llvm-svn: 20595
|
| |
|
|
| |
llvm-svn: 20593
|
| |
|
|
| |
llvm-svn: 20588
|
| |
|
|
|
|
|
|
| |
incomplete,
ALWAYS mark them incomplete if they are external!
llvm-svn: 20586
|
| |
|
|
| |
llvm-svn: 20584
|
| |
|
|
| |
llvm-svn: 20580
|
| |
|
|
| |
llvm-svn: 20576
|
| |
|
|
| |
llvm-svn: 20342
|
| |
|
|
| |
llvm-svn: 20308
|
| |
|
|
| |
llvm-svn: 20195
|
| |
|
|
| |
llvm-svn: 20194
|
| |
|
|
| |
llvm-svn: 20086
|
| |
|
|
| |
llvm-svn: 20035
|
| |
|
|
| |
llvm-svn: 20018
|
| |
|
|
| |
llvm-svn: 19942
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Change the FunctionCalls and AuxFunctionCalls vectors into std::lists.
This makes many operations on these lists much more natural, and avoids
*exteremely* expensive copying of DSCallSites (e.g. moving nodes around
between lists, erasing a node from not the end of the vector, etc).
With a profile build of analyze, this speeds up BU DS from 25.14s to
12.59s on 176.gcc. I expect that it would help TD even more, but I don't
have data for it.
This effectively eliminates removeIdenticalCalls and children from the
profile, going from 6.53 to 0.27s.
llvm-svn: 19939
|
| |
|
|
| |
llvm-svn: 19506
|
| |
|
|
|
|
| |
Add some ifdefs for some stuff I like to be able to toggle easily
llvm-svn: 18665
|
| |
|
|
| |
llvm-svn: 17375
|
| |
|
|
| |
llvm-svn: 17367
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Calls to external global VARIABLES should not be treated as a call to an
external function
2. Efficiently deleting an element from a vector by using std::swap with
the back, then pop_back is NOT a good way to keep the vector sorted.
3. Our hope of having stuff get deleted by making them redundant just won't
work. In particular, if we have three calls in sequence that should be
merged: A, B, C first we unify B into A. To be sure that they appeared
identical (so B would be erased) we set B = A. On the next step, we
unified C into A and set C = A. Unfortunately, this is no guarantee that
C = B, so we would fail to delete the dead call. Switch to a more
explicit scheme.
llvm-svn: 17357
|
| |
|
|
|
|
|
|
|
| |
* change some uses of NH.getNode() in a bool context to use !NH.isNull()
* Fix a bunch of places where we depended on the (undefined) order of
evaluation of arguments to function calls to ensure that getNode() was
called before getOffset(). In practice, this was NOT happening.
llvm-svn: 17354
|
| |
|
|
|
|
|
|
| |
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137
|
| |
|
|
| |
llvm-svn: 15334
|
| |
|
|
| |
llvm-svn: 14682
|
| |
|
|
| |
llvm-svn: 14663
|
| |
|
|
|
|
|
|
|
|
|
|
| |
is HOPELESSLY broken. The problem is that the embedded getNode call can
change the offset of the node handle in unpredictable ways.
As it turns out, all of the clients of this method really want to set
both the node and the offset, thus it is more efficient (and less buggy)
to just do both of them in one method call. This fixes some obscure bugs
handling non-forwarded node handles.
llvm-svn: 14660
|
| |
|
|
|
|
| |
several mallocbench programs, including perl.
llvm-svn: 14342
|