Implement 2 important changes: (1) rematerialization from the globals graph,
authorVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 16 Jul 2003 21:36:31 +0000 (21:36 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 16 Jul 2003 21:36:31 +0000 (21:36 +0000)
commit78bbec7fcb7664d669eb18f2f8767dcc2e1a8274
tree856db527d0e2ecfa2799d13a75eb47afdeb3fba0
parent2e1de5ed593b7236db9da3df27111a5539db2340
Implement 2 important changes: (1) rematerialization from the globals graph,
and (2) faster inlining by cloning only reachable nodes.  In particular:
(1) Added DSGraph::cloneReachableSubgraph and DSGraph::cloneReachableNodes
    to clone the subgraph reachable from a set of root nodes, into the
    current graph, merging the global nodes into thos in the current graph.
    The TD pass now uses this for faster inlining, and so does the
    next function.
(2) Added DSGraph::updateFromGlobalGraph() to rematerialize nodes from the
    globals graph into the current graph in both BU and TD passes.
(3) `I' flags are removed from all nodes in the globals graph, because they
    are difficult to maintain correctly and are not needed anyway.
(4) Aux. function calls are only removed to the globals graph if they
    will never be resovled.  (This is what fixed gap.)  The immediate
    reason is that if we took these out of a function (and moved them to
    the globals graph) we would need to rematerialize these nodes into the
    function graph for every function in the BU pass.  The longer term
    problem is that we would need to find a way to remove them from the
    globals graph iff they have been resolved on all paths through the
    call graph.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7187 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/DataStructure/DataStructure.cpp