Make steensgaards performance not shameful
authorChris Lattner <sabre@nondot.org>
Mon, 10 Feb 2003 00:14:57 +0000 (00:14 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 10 Feb 2003 00:14:57 +0000 (00:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5524 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/Steensgaard.cpp

index 5a37791ca12479bc7858f6c5afcec2e08cd939b9..b17846e2ecad462070a3a509ff6c311cd7d3cba8 100644 (file)
@@ -121,6 +121,7 @@ bool Steens::run(Module &M) {
   // Loop over the rest of the module, merging graphs for non-external functions
   // into this graph.
   //
+  unsigned Count = 0;
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
     if (!I->isExternal()) {
       hash_map<Value*, DSNodeHandle> ValMap;
@@ -142,6 +143,9 @@ bool Steens::run(Module &M) {
       for (hash_map<Value*, DSNodeHandle>::iterator I = ValMap.begin(),
              E = ValMap.end(); I != E; ++I)
         GVM[I->first].mergeWith(I->second);
+
+      if ((++Count & 1) == 0)   // Prune nodes out every other time...
+        ResultGraph->removeTriviallyDeadNodes();
     }
 
   // FIXME: Must recalculate and use the Incomplete markers!!
@@ -174,15 +178,17 @@ bool Steens::run(Module &M) {
           ResolveFunctionCall(F, CurCall, RetValMap[F]);
           Eliminated = true;
         }
-      if (Eliminated)
-        CallTargets.erase(CallTargets.begin()+c);
-      else
+      if (Eliminated) {
+        CallTargets[c] = CallTargets.back();
+        CallTargets.pop_back();
+      } else
         ++c;  // Cannot eliminate this call, skip over it...
     }
 
-    if (CallTargets.empty())          // Eliminated all calls?
-      Calls.erase(Calls.begin()+i);   // Remove from call list...
-    else
+    if (CallTargets.empty()) {        // Eliminated all calls?
+      CurCall = Calls.back();         // Remove entry
+      Calls.pop_back();
+    } else
       ++i;                            // Skip this call site...
   }