diff options
Diffstat (limited to 'lib/Analysis/DataStructure/TopDownClosure.cpp')
-rw-r--r-- | lib/Analysis/DataStructure/TopDownClosure.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/lib/Analysis/DataStructure/TopDownClosure.cpp b/lib/Analysis/DataStructure/TopDownClosure.cpp index cfcf52ea58..8c0db6dc55 100644 --- a/lib/Analysis/DataStructure/TopDownClosure.cpp +++ b/lib/Analysis/DataStructure/TopDownClosure.cpp @@ -70,13 +70,11 @@ bool TDDataStructures::runOnModule(Module &M) { // Loop over unresolved call nodes. Any functions passed into (but not // returned!) from unresolvable call nodes may be invoked outside of the // current module. - const std::vector<DSCallSite> &Calls = GlobalsGraph->getAuxFunctionCalls(); - for (unsigned i = 0, e = Calls.size(); i != e; ++i) { - const DSCallSite &CS = Calls[i]; - for (unsigned arg = 0, e = CS.getNumPtrArgs(); arg != e; ++arg) - markReachableFunctionsExternallyAccessible(CS.getPtrArg(arg).getNode(), + for (DSGraph::afc_iterator I = GlobalsGraph->afc_begin(), + E = GlobalsGraph->afc_end(); I != E; ++I) + for (unsigned arg = 0, e = I->getNumPtrArgs(); arg != e; ++arg) + markReachableFunctionsExternallyAccessible(I->getPtrArg(arg).getNode(), Visited); - } Visited.clear(); // Functions without internal linkage also have unknown incoming arguments! @@ -135,10 +133,8 @@ void TDDataStructures::ComputePostOrder(Function &F,hash_set<DSGraph*> &Visited, Visited.insert(&G); // Recursively traverse all of the callee graphs. - const std::vector<DSCallSite> &FunctionCalls = G.getFunctionCalls(); - - for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) { - Instruction *CallI = FunctionCalls[i].getCallSite().getInstruction(); + for (DSGraph::fc_iterator CI = G.fc_begin(), E = G.fc_end(); CI != E; ++CI) { + Instruction *CallI = CI->getCallSite().getInstruction(); std::pair<BUDataStructures::ActualCalleesTy::const_iterator, BUDataStructures::ActualCalleesTy::const_iterator> IP = ActualCallees.equal_range(CallI); @@ -211,8 +207,7 @@ void TDDataStructures::inlineGraphIntoCallees(DSGraph &Graph) { // We are done with computing the current TD Graph! Now move on to // inlining the current graph into the graphs for its callees, if any. // - const std::vector<DSCallSite> &FunctionCalls = Graph.getFunctionCalls(); - if (FunctionCalls.empty()) { + if (Graph.fc_begin() == Graph.fc_end()) { DEBUG(std::cerr << " [TD] No callees for: " << Graph.getFunctionNames() << "\n"); return; @@ -224,7 +219,7 @@ void TDDataStructures::inlineGraphIntoCallees(DSGraph &Graph) { // would be cloned only once, this should still be better on average). // DEBUG(std::cerr << " [TD] Inlining '" << Graph.getFunctionNames() <<"' into " - << FunctionCalls.size() << " call nodes.\n"); + << Graph.getFunctionCalls().size() << " call nodes.\n"); const BUDataStructures::ActualCalleesTy &ActualCallees = getAnalysis<BUDataStructures>().getActualCallees(); @@ -235,12 +230,13 @@ void TDDataStructures::inlineGraphIntoCallees(DSGraph &Graph) { // multiple call sites to the callees in the graph from this caller. std::multimap<DSGraph*, std::pair<Function*, const DSCallSite*> > CallSites; - for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) { - Instruction *CallI = FunctionCalls[i].getCallSite().getInstruction(); + for (DSGraph::fc_iterator CI = Graph.fc_begin(), E = Graph.fc_end(); + CI != E; ++CI) { + Instruction *CallI = CI->getCallSite().getInstruction(); // For each function in the invoked function list at this call site... std::pair<BUDataStructures::ActualCalleesTy::const_iterator, - BUDataStructures::ActualCalleesTy::const_iterator> - IP = ActualCallees.equal_range(CallI); + BUDataStructures::ActualCalleesTy::const_iterator> + IP = ActualCallees.equal_range(CallI); // Loop over each actual callee at this call site for (BUDataStructures::ActualCalleesTy::const_iterator I = IP.first; I != IP.second; ++I) { @@ -248,7 +244,7 @@ void TDDataStructures::inlineGraphIntoCallees(DSGraph &Graph) { assert(&CalleeGraph != &Graph && "TD need not inline graph into self!"); CallSites.insert(std::make_pair(&CalleeGraph, - std::make_pair(I->second, &FunctionCalls[i]))); + std::make_pair(I->second, &*CI))); } } |