Make this work better for constants that aren't necessarily in ANY graph, such as...
authorChris Lattner <sabre@nondot.org>
Sat, 20 Sep 2003 16:12:57 +0000 (16:12 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 20 Sep 2003 16:12:57 +0000 (16:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8628 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/DataStructureStats.cpp

index 887eb7f550a0339de12faac9034fc4030d6fbea9..674f689a685d4100fe32905869ff3585ac7dbe16 100644 (file)
@@ -33,6 +33,7 @@ namespace {
     const DSGraph *TDGraph;
 
     DSNode *getNodeForValue(Value *V);
+    bool isNodeForValueCollapsed(Value *V);
   public:
     /// Driver functions to compute the Load/Store Dep. Graph per function.
     bool runOnFunction(Function& F);
@@ -90,14 +91,24 @@ void DSGraphStats::countCallees(const Function& F) {
 
 DSNode *DSGraphStats::getNodeForValue(Value *V) {
   const DSGraph *G = TDGraph;
-  if (isa<GlobalValue>(V))
+  if (isa<GlobalValue>(V) || isa<Constant>(V))
     G = TDGraph->getGlobalsGraph();
 
-  return G->getNodeForValue(V).getNode();
+  const DSGraph::ScalarMapTy &ScalarMap = G->getScalarMap();
+  DSGraph::ScalarMapTy::const_iterator I = ScalarMap.find(V);
+  if (I != ScalarMap.end())
+    return I->second.getNode();
+  return 0;
+}
+
+bool DSGraphStats::isNodeForValueCollapsed(Value *V) {
+  if (DSNode *N = getNodeForValue(V))
+    return N->isNodeCompletelyFolded();
+  return false;
 }
 
 void DSGraphStats::visitLoad(LoadInst &LI) {
-  if (getNodeForValue(LI.getOperand(0))->isNodeCompletelyFolded()) {
+  if (isNodeForValueCollapsed(LI.getOperand(0))) {
     NumUntypedMemAccesses++;
   } else {
     NumTypedMemAccesses++;
@@ -105,7 +116,7 @@ void DSGraphStats::visitLoad(LoadInst &LI) {
 }
 
 void DSGraphStats::visitStore(StoreInst &SI) {
-  if (getNodeForValue(SI.getOperand(1))->isNodeCompletelyFolded()) {
+  if (isNodeForValueCollapsed(SI.getOperand(1))) {
     NumUntypedMemAccesses++;
   } else {
     NumTypedMemAccesses++;