[llvm-commits] [poolalloc] r58398 - /poolalloc/trunk/lib/DSA/BottomUpClosure.cpp
Andrew Lenharth
alenhar2 at cs.uiuc.edu
Wed Oct 29 14:45:36 PDT 2008
Author: alenhar2
Date: Wed Oct 29 16:45:34 2008
New Revision: 58398
URL: http://llvm.org/viewvc/llvm-project?rev=58398&view=rev
Log:
don't reinline if resolved list doesn't change (dynamically discovered scc due to partial inlining)
Modified:
poolalloc/trunk/lib/DSA/BottomUpClosure.cpp
Modified: poolalloc/trunk/lib/DSA/BottomUpClosure.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/BottomUpClosure.cpp?rev=58398&r1=58397&r2=58398&view=diff
==============================================================================
--- poolalloc/trunk/lib/DSA/BottomUpClosure.cpp (original)
+++ poolalloc/trunk/lib/DSA/BottomUpClosure.cpp Wed Oct 29 16:45:34 2008
@@ -236,6 +236,12 @@
std::vector<const Function*>::iterator uid = std::unique(CalleeFunctions.begin(), CalleeFunctions.end());
CalleeFunctions.resize(uid - CalleeFunctions.begin());
+ std::vector<const Function*> PreResolvedFuncs;
+ GetAllAuxCallees(Graph, PreResolvedFuncs);
+ std::sort(PreResolvedFuncs.begin(), PreResolvedFuncs.end());
+ uid = std::unique(PreResolvedFuncs.begin(), PreResolvedFuncs.end());
+ PreResolvedFuncs.resize(uid - PreResolvedFuncs.begin());
+
// The edges out of the current node are the call site targets...
for (unsigned i = 0, e = CalleeFunctions.size(); i != e; ++i) {
const Function *Callee = CalleeFunctions[i];
@@ -268,15 +274,27 @@
// Should we revisit the graph? Only do it if there are now new resolvable
// callees or new callees
- unsigned oldsize = CalleeFunctions.size();
- GetAnyAuxCallees(Graph, CalleeFunctions);
- std::sort(CalleeFunctions.begin(), CalleeFunctions.end());
- std::vector<const Function*>::iterator uid = std::unique(CalleeFunctions.begin(), CalleeFunctions.end());
- CalleeFunctions.resize(uid - CalleeFunctions.begin());
+ std::vector<const Function*> NewCalleeFuncs;
+ GetAnyAuxCallees(Graph, NewCalleeFuncs);
+ std::sort(NewCalleeFuncs.begin(), NewCalleeFuncs.end());
+ std::vector<const Function*>::iterator uid = std::unique(NewCalleeFuncs.begin(), NewCalleeFuncs.end());
+ NewCalleeFuncs.resize(uid - NewCalleeFuncs.begin());
+ uid = std::set_difference(NewCalleeFuncs.begin(), NewCalleeFuncs.end(),
+ CalleeFunctions.begin(), CalleeFunctions.end(),
+ NewCalleeFuncs.begin());
+ NewCalleeFuncs.resize(uid - NewCalleeFuncs.begin());
std::vector<const Function*> ResolvedFuncs;
GetAllAuxCallees(Graph, ResolvedFuncs);
- if (ResolvedFuncs.size() || CalleeFunctions.size() > oldsize) {
+ std::sort(ResolvedFuncs.begin(), ResolvedFuncs.end());
+ uid = std::unique(ResolvedFuncs.begin(), ResolvedFuncs.end());
+ ResolvedFuncs.resize(uid - ResolvedFuncs.begin());
+ uid = std::set_difference(ResolvedFuncs.begin(), ResolvedFuncs.end(),
+ PreResolvedFuncs.begin(), PreResolvedFuncs.end(),
+ ResolvedFuncs.begin());
+ ResolvedFuncs.resize(uid - ResolvedFuncs.begin());
+
+ if (ResolvedFuncs.size() || NewCalleeFuncs.size()) {
DOUT << "Recalculating " << F->getName() << " due to new knowledge\n";
ValMap.erase(F);
return calculateGraphs(F, Stack, NextID, ValMap);
More information about the llvm-commits
mailing list