Get rid of the EquivClassGraphArgsInfo class, and the map that held it.
authorChris Lattner <sabre@nondot.org>
Mon, 1 Nov 2004 20:37:00 +0000 (20:37 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Nov 2004 20:37:00 +0000 (20:37 +0000)
We only need one instance of the vector that it contains at a time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17407 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DataStructure/EquivClassGraphs.h
lib/Analysis/DataStructure/EquivClassGraphs.cpp

index 320513f4e9a2dd8da5a6314d2380571984bdfcb1..d49c3da0bb70bfa4ef3769187d83de477cb626f9 100644 (file)
@@ -28,18 +28,6 @@ class Module;
 class Function;
 
 namespace PA {
-
-  /// EquivClassGraphArgsInfo - Information about the set of argument nodes 
-  /// in a DS graph (the number of argument nodes is the max of argument nodes
-  /// for all functions folded into the graph).
-  /// FIXME: This class is only used temporarily and could be eliminated.
-  ///  
-  struct EquivClassGraphArgsInfo {
-    const DSGraph* ECGraph;
-    std::vector<DSNodeHandle> argNodes;
-    EquivClassGraphArgsInfo() : ECGraph(NULL) {}
-  };
-
   /// EquivClassGraphs - This is the same as the complete bottom-up graphs, but
   /// with functions partitioned into equivalence classes and a single merged
   /// DS graph for all functions in an equivalence class.  After this merging,
@@ -61,10 +49,6 @@ namespace PA {
     // same function pointer are in the same class.
     EquivalenceClasses<Function*> FuncECs;
 
-    // Each equivalence class graph contains several functions.
-    // Remember their argument nodes (and return nodes?)
-    std::map<const DSGraph*, EquivClassGraphArgsInfo> ECGraphInfo;
-    
     /// OneCalledFunction - For each indirect call, we keep track of one
     /// target of the call.  This is used to find equivalence class called by
     /// a call site.
@@ -112,16 +96,6 @@ namespace PA {
       return FuncECs.getEqClass(leaderF);
     }
 
-    /// getECGraphInfo - Get the graph info object with arg nodes info
-    /// 
-    EquivClassGraphArgsInfo &getECGraphInfo(const DSGraph* G) {
-      assert(G != NULL && "getECGraphInfo: Null graph!");
-      EquivClassGraphArgsInfo& GraphInfo = ECGraphInfo[G];
-      if (GraphInfo.ECGraph == NULL)
-        GraphInfo.ECGraph = G;
-      return GraphInfo;
-    }
-
     DSGraph &getGlobalsGraph() const {
       return *GlobalsGraph;
     }
index 0e20714b29e9d699cecd62439621fa32363ed2c1..1d80b9cb0eb489cde9f527e7642e763c88528164 100644 (file)
@@ -115,7 +115,7 @@ bool PA::EquivClassGraphs::runOnModule(Module &M) {
 //
 void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
   const ActualCalleesTy& AC = CBU->getActualCallees();
-
+  
   // Loop over all of the indirect calls in the program.  If a call site can
   // call multiple different functions, we need to unify all of the callees into
   // the same equivalence class.
@@ -196,11 +196,12 @@ void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
       // equivalence graph.
       DSGraph *mergedG = &getOrCreateGraph(*LF);
 
-      // Record the argument nodes for use in merging later below
-      EquivClassGraphArgsInfo& GraphInfo = getECGraphInfo(mergedG);
+      // Record the argument nodes for use in merging later below.
+      std::vector<DSNodeHandle> ArgNodes;  
+
       for (Function::aiterator AI1 = LF->abegin(); AI1 != LF->aend(); ++AI1)
         if (DS::isPointerType(AI1->getType()))
-          GraphInfo.argNodes.push_back(mergedG->getNodeForValue(AI1));
+          ArgNodes.push_back(mergedG->getNodeForValue(AI1));
       
       // Merge in the graphs of all other functions in this equiv. class.  Note
       // that two or more functions may have the same graph, and it only needs
@@ -234,14 +235,14 @@ void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
         // Merge the function arguments with all argument nodes found so far.
         // If there are extra function args, add them to the vector of argNodes
         Function::aiterator AI2 = F->abegin(), AI2end = F->aend();
-        for (unsigned arg=0, numArgs=GraphInfo.argNodes.size();
+        for (unsigned arg=0, numArgs = ArgNodes.size();
              arg != numArgs && AI2 != AI2end; ++AI2, ++arg)
           if (DS::isPointerType(AI2->getType()))
-            GraphInfo.argNodes[arg].mergeWith(mergedG->getNodeForValue(AI2));
+            ArgNodes[arg].mergeWith(mergedG->getNodeForValue(AI2));
 
         for ( ; AI2 != AI2end; ++AI2)
           if (DS::isPointerType(AI2->getType()))
-            GraphInfo.argNodes.push_back(mergedG->getNodeForValue(AI2));
+            ArgNodes.push_back(mergedG->getNodeForValue(AI2));
         DEBUG(mergedG->AssertGraphOK());
       }
     }