llvm/tools
Chandler Carruth 57732bff1e [PM] Add a new "lazy" call graph analysis pass for the new pass manager.
The primary motivation for this pass is to separate the call graph
analysis used by the new pass manager's CGSCC pass management from the
existing call graph analysis pass. That analysis pass is (somewhat
unfortunately) over-constrained by the existing CallGraphSCCPassManager
requirements. Those requirements make it *really* hard to cleanly layer
the needed functionality for the new pass manager on top of the existing
analysis.

However, there are also a bunch of things that the pass manager would
specifically benefit from doing differently from the existing call graph
analysis, and this new implementation tries to address several of them:

- Be lazy about scanning function definitions. The existing pass eagerly
  scans the entire module to build the initial graph. This new pass is
  significantly more lazy, and I plan to push this even further to
  maximize locality during CGSCC walks.
- Don't use a single synthetic node to partition functions with an
  indirect call from functions whose address is taken. This node creates
  a huge choke-point which would preclude good parallelization across
  the fanout of the SCC graph when we got to the point of looking at
  such changes to LLVM.
- Use a memory dense and lightweight representation of the call graph
  rather than value handles and tracking call instructions. This will
  require explicit update calls instead of some updates working
  transparently, but should end up being significantly more efficient.
  The explicit update calls ended up being needed in many cases for the
  existing call graph so we don't really lose anything.
- Doesn't explicitly model SCCs and thus doesn't provide an "identity"
  for an SCC which is stable across updates. This is essential for the
  new pass manager to work correctly.
- Only form the graph necessary for traversing all of the functions in
  an SCC friendly order. This is a much simpler graph structure and
  should be more memory dense. It does limit the ways in which it is
  appropriate to use this analysis. I wish I had a better name than
  "call graph". I've commented extensively this aspect.

This is still very much a WIP, in fact it is really just the initial
bits. But it is about the fourth version of the initial bits that I've
implemented with each of the others running into really frustrating
problms. This looks like it will actually work and I'd like to split the
actual complexity across commits for the sake of my reviewers. =] The
rest of the implementation along with lots of wiring will follow
somewhat more rapidly now that there is a good path forward.

Naturally, this doesn't impact any of the existing optimizer. This code
is specific to the new pass manager.

A bunch of thanks are deserved for the various folks that have helped
with the design of this, especially Nick Lewycky who actually sat with
me to go through the fundamentals of the final version here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200903 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-06 04:37:03 +00:00
..
bugpoint Do not reference llvm-gcc from bugpoint 2014-01-27 13:44:58 +00:00
bugpoint-passes Set LLVM_EXPORTED_SYMBOL_FILE in CMakeLists whose corresponding Makefiles do so. 2013-12-29 23:06:49 +00:00
gold Re-sort #include lines again, prior to moving headers around. 2014-01-13 08:04:33 +00:00
llc Remove support for not using .loc directives. 2014-02-05 18:00:21 +00:00
lli [CMake] Put lli-child-target into the Folder "Misc". 2014-01-28 09:43:41 +00:00
llvm-ar Simplify getSymbolFlags. 2014-01-31 20:57:12 +00:00
llvm-as [PM] Make the verifier work independently of any pass manager. 2014-01-19 02:22:18 +00:00
llvm-bcanalyzer [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
llvm-c-test Use -std=gnu99 in tools/llvm-c-test/CMakeLists.txt 2014-01-08 11:48:19 +00:00
llvm-config llvm-config: Fix typo in help message introduced with r197664. 2013-12-25 02:24:32 +00:00
llvm-cov llvm-cov: Implement the preserve-paths flag 2014-02-04 10:45:02 +00:00
llvm-diff [CMake] Update LLVM_LINK_COMPONENTS for each CMakeLists.txt. 2013-12-10 11:13:32 +00:00
llvm-dis Return an error_code from materializeAllPermanently. 2014-01-14 23:51:27 +00:00
llvm-dwarfdump Change createObjectFile to return an ErrorOr. 2014-01-22 00:14:49 +00:00
llvm-extract [PM] Wire up support for writing bitcode with new PM. 2014-01-13 07:38:24 +00:00
llvm-jitlistener Manually update the dependencies in the Makefiles. It turns out that all 2013-03-26 03:45:47 +00:00
llvm-link [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
llvm-lto Re-sort #include lines again, prior to moving headers around. 2014-01-13 08:04:33 +00:00
llvm-mc Remove support for not using .loc directives. 2014-02-05 18:00:21 +00:00
llvm-mcmarkup MC: Simple example parser for MC assembly markup. 2012-10-31 23:24:13 +00:00
llvm-nm Use the information provided by getFlags to unify some code in llvm-nm. 2014-02-05 05:19:19 +00:00
llvm-objdump Simplify getSymbolFlags. 2014-01-31 20:57:12 +00:00
llvm-readobj tools: fix Twine abuse 2014-01-30 06:19:27 +00:00
llvm-rtdyld Simplify the handling of iterators in ObjectFile. 2014-01-30 02:49:50 +00:00
llvm-shlib Strip dead code when linking by default with BFD ld (linux, ...) and ld64 (os x). 2013-12-27 22:38:59 +00:00
llvm-size Simplify the handling of iterators in ObjectFile. 2014-01-30 02:49:50 +00:00
llvm-stress [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
llvm-symbolizer Simplify the handling of iterators in ObjectFile. 2014-01-30 02:49:50 +00:00
lto Revert r200560, "LTO itself hasn't depended on MCDisassembler any more." 2014-01-31 17:57:50 +00:00
macho-dump Simplify the handling of iterators in ObjectFile. 2014-01-30 02:49:50 +00:00
msbuild VS integration: use the correct registry key after r195379 2013-11-22 18:25:43 +00:00
obj2yaml llvm/tools: Prune redundant target_link_libraries. 2014-01-31 17:40:06 +00:00
opt [PM] Add a new "lazy" call graph analysis pass for the new pass manager. 2014-02-06 04:37:03 +00:00
yaml2obj llvm/tools: Prune redundant target_link_libraries. 2014-01-31 17:40:06 +00:00
CMakeLists.txt llvm/tools/llvm-c-test should be built also on msvc. 2013-10-23 17:56:59 +00:00
LLVMBuild.txt Remove the very substantial, largely unmaintained legacy PGO 2013-10-02 15:42:23 +00:00
Makefile Add llvm-c-test tool for testing llvm-c 2013-10-23 08:10:20 +00:00