1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

Only clone global nodes between graphs if both graphs have the global.

llvm-svn: 11928
This commit is contained in:
Chris Lattner 2004-02-27 20:05:15 +00:00
parent 138a7dfb62
commit 9e71c09ff5
2 changed files with 9 additions and 13 deletions

View File

@ -279,6 +279,9 @@ void BUDataStructures::calculateGraph(DSGraph &Graph) {
//
DSGraph &GI = getDSGraph(*Callee); // Graph to inline
if (Callee->getName() == "bc_raise")
std::cerr << "HERE!\n";
DEBUG(std::cerr << " Inlining graph for " << Callee->getName()
<< "[" << GI.getGraphSize() << "+"
<< GI.getAuxFunctionCalls().size() << "] into '"

View File

@ -33,10 +33,6 @@ namespace {
Statistic<> NumDNE ("dsa", "Number of nodes removed by reachability");
Statistic<> NumTrivialDNE ("dsa", "Number of nodes trivially removed");
Statistic<> NumTrivialGlobalDNE("dsa", "Number of globals trivially removed");
cl::opt<bool>
EnableDSNodeGlobalRootsHack("enable-dsa-globalrootshack", cl::Hidden,
cl::desc("Make DSA less aggressive when cloning graphs"));
};
#if 1
@ -1239,15 +1235,12 @@ void DSGraph::mergeInGraph(const DSCallSite &CS, Function &F,
AuxFunctionCalls.push_back(DSCallSite(Graph.AuxFunctionCalls[i], RC));
}
// If the user requested it, add the nodes that we need to clone to the
// RootNodes set.
if (!EnableDSNodeGlobalRootsHack)
// FIXME: Why is this not iterating over the globals in the graph??
for (node_iterator NI = Graph.node_begin(), E = Graph.node_end();
NI != E; ++NI)
if (!(*NI)->getGlobals().empty())
RC.getClonedNH(*NI);
// Clone over all globals that appear in the caller and callee graphs.
for (DSScalarMap::global_iterator GI = Graph.getScalarMap().global_begin(),
E = Graph.getScalarMap().global_end(); GI != E; ++GI)
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(*GI))
if (ScalarMap.count(GV))
RC.merge(ScalarMap[GV], Graph.getNodeForValue(GV));
} else {
DSNodeHandle RetVal = getReturnNodeFor(F);