Commit Graph

14 Commits

Author SHA1 Message Date
Mark Lacey
445afdc031 Delete the old call graph code.
Swift SVN r22598
2014-10-08 07:47:32 +00:00
Michael Gottesman
e5fcbc6d59 [func-sig-opts] Add get{Known,}CallerCallSites to the CallGraph.
This returns an ArrayRefView that allows one to iterate over the CallSites of a
functions callers in a clean way.

Swift SVN r21730
2014-09-04 23:34:35 +00:00
Michael Gottesman
6d1fef172a Small LLVM style fixups. NFC.
Swift SVN r21617
2014-08-31 19:59:44 +00:00
Mark Lacey
6a695f3099 Move DeadFunctionElimination to using the new call graph.
The old call graph remains, but the new call graph can obtained by
calling getCallGraph() on the analysis pass.

I'll move the few other passes that use the call graph over soon and
then rip out the old call graph.

No diffs in the stdlib.

Swift SVN r21565
2014-08-29 05:03:31 +00:00
Mark Lacey
dc625f7c19 Minor API change in call graph.
Swift SVN r21553
2014-08-29 00:32:17 +00:00
Mark Lacey
36365d79df In the new call graph, find the SCCs in bottom-up order.
With this change we generate the SCCs in the call graph (for the kinds
of calls we currently recognize) in bottom-up, which we can then
iterate over directly or in reverse for invocation- and
reverse-invocation-order traversal of the call graph.

(This still isn't hooked up - but will be after some dumping routines
and verification of the output).

Swift SVN r21552
2014-08-29 00:32:17 +00:00
Mark Lacey
3494d6ab39 Track call graph roots with a SmallVector rather than DenseSet.
This will allow us to search in the order the roots are added which
should improve stability of our output. There is also an ordinal on each
node that we can use to choose order of traversing edges at a given call
site.

Swift SVN r21484
2014-08-27 16:59:50 +00:00
Mark Lacey
dee10cb164 Update the new call graph so that edges have sets of call graph nodes.
Previously we tracked a set of functions that could be called from a given
call site. Now we track a set of call graph nodes (each of which
represents a callable function). As a result we now create call graph
nodes for declarations rather than just definitions.

Swift SVN r21483
2014-08-27 15:54:34 +00:00
Mark Lacey
a3350db69c Add statistics to call graph construction.
Also stub out some of the cases we'll need to handle to build a more
complete call graph.

Swift SVN r21430
2014-08-23 05:48:54 +00:00
Mark Lacey
34a1050222 Add data structures for a new, more detailed, call graph.
This is not yet hooked up. I want to add a dumper and some tests, and
need to implement code to do invocation- and reverse-invocation-ordering
over the SCCs of the call graph before it can fully replace the existing
code.

This call graph has edges for each call site, so it's really a
multigraph. Each call site tracks the set of functions that can be
called from that point. Currently that set is always a singleton since
we only handle applies of direct function_refs (like the existing call
graph). In time it will be expanded to handle other types of function
application.

Swift SVN r21407
2014-08-22 07:46:53 +00:00
Mark Lacey
7b30e832e4 Move contents of CallGraph.h into CallGraphAnalysis.h.
Swift SVN r21393
2014-08-22 00:00:04 +00:00
Mark Lacey
f1f3025838 Add call graph edges based on direct calls.
We were adding call graph edges based on seeing a function_ref. Instead,
we'll only add them now based on a direct apply of a function_ref.

Also a minor refactoring to move the code that walks the blocks and
instructions of a function into its own method.

Swift SVN r21243
2014-08-15 23:29:37 +00:00
Mark Lacey
d5a619bbad Small refactoring of call graph code.
This is a first step towards building a better call graph.

Swift SVN r21152
2014-08-12 18:20:21 +00:00
Nadav Rotem
898bf23738 Move the CallGraphAnalysis to a new file.
Swift SVN r20714
2014-07-29 23:18:56 +00:00