Only call getNodeForValue on pointer arguments! this fixes a problem running
authorChris Lattner <sabre@nondot.org>
Sun, 31 Oct 2004 17:47:48 +0000 (17:47 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 31 Oct 2004 17:47:48 +0000 (17:47 +0000)
on Prolangs-C++/objects

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

lib/Analysis/DataStructure/EquivClassGraphs.cpp

index 7ed88efc95768a3cafb86c906ec58a1bf8a268f6..92e7a3b2e08d4dc811cd59b9fd534b93f1a01d6c 100644 (file)
@@ -181,6 +181,7 @@ void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
              EqEnd = EqClass.end(); EqI != EqEnd; ++EqI) {
         Function* F = *EqI;
         DSGraph*& FG = FoldedGraphsMap[F];
+
         if (F == LF || FG == mergedG)
           continue;
         
@@ -194,6 +195,7 @@ void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
         
         GraphsMerged.insert(CBUGraph);
         DSGraph::NodeMapTy NodeMap;    
+
         mergedG->cloneInto(*CBUGraph, mergedG->getScalarMap(),
                            mergedG->getReturnNodes(), NodeMap, 0);
 
@@ -204,10 +206,14 @@ void PA::EquivClassGraphs::buildIndirectFunctionSets(Module &M) {
         // 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();
-             arg < numArgs && AI2 != AI2end; ++AI2, ++arg)
-          GraphInfo.argNodes[arg].mergeWith(mergedG->getNodeForValue(AI2));
+             arg != numArgs && AI2 != AI2end; ++AI2, ++arg)
+          if (DS::isPointerType(AI2->getType()))
+            GraphInfo.argNodes[arg].mergeWith(mergedG->getNodeForValue(AI2));
+
         for ( ; AI2 != AI2end; ++AI2)
-          GraphInfo.argNodes.push_back(mergedG->getNodeForValue(AI2));
+          if (DS::isPointerType(AI2->getType()))
+            GraphInfo.argNodes.push_back(mergedG->getNodeForValue(AI2));
+        DEBUG(mergedG->AssertGraphOK());
       }
     }
   }
@@ -223,7 +229,6 @@ DSGraph &PA::EquivClassGraphs::getOrCreateGraph(Function &F) {
   // Use the CBU graph directly without copying it.
   // This automatically updates the FoldedGraphsMap via the reference.
   Graph = &CBU->getDSGraph(F);
-
   return *Graph;
 }
 
@@ -306,6 +311,7 @@ unsigned PA::EquivClassGraphs::processSCC(DSGraph &FG, Function& F,
     FG.removeTriviallyDeadNodes();
 
   Stack.pop_back();
+
   processGraph(FG, F);
   ValMap[&F] = ~0U;
   return MyID;
@@ -319,7 +325,7 @@ void PA::EquivClassGraphs::processGraph(DSGraph &G, Function &F) {
 
   hash_set<Instruction*> calls;
 
-  DSGraph* CallerGraph = sameAsCBUGraph(F)? NULL : &getOrCreateGraph(F);
+  DSGraph* CallerGraph = sameAsCBUGraph(F) ? NULL : &getOrCreateGraph(F);
 
   // If the function has not yet been cloned, let's check if any callees
   // need to be inlined before cloning it.