Only call getNodeForValue on pointer arguments!  this fixes a problem running
on Prolangs-C++/objects


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17368 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/DataStructure/EquivClassGraphs.cpp b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
index 7ed88ef..92e7a3b 100644
--- a/lib/Analysis/DataStructure/EquivClassGraphs.cpp
+++ b/lib/Analysis/DataStructure/EquivClassGraphs.cpp
@@ -181,6 +181,7 @@
              EqEnd = EqClass.end(); EqI != EqEnd; ++EqI) {
         Function* F = *EqI;
         DSGraph*& FG = FoldedGraphsMap[F];
+
         if (F == LF || FG == mergedG)
           continue;
         
@@ -194,6 +195,7 @@
         
         GraphsMerged.insert(CBUGraph);
         DSGraph::NodeMapTy NodeMap;    
+
         mergedG->cloneInto(*CBUGraph, mergedG->getScalarMap(),
                            mergedG->getReturnNodes(), NodeMap, 0);
 
@@ -204,10 +206,14 @@
         // 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 @@
   // 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 @@
     FG.removeTriviallyDeadNodes();
 
   Stack.pop_back();
+
   processGraph(FG, F);
   ValMap[&F] = ~0U;
   return MyID;
@@ -319,7 +325,7 @@
 
   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.