[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