Use isNull instead of getNode() to test for existence of a node, this is cheaper.
authorChris Lattner <sabre@nondot.org>
Sun, 22 Feb 2004 00:53:54 +0000 (00:53 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 22 Feb 2004 00:53:54 +0000 (00:53 +0000)
FIX MAJOR BUG, whereby we didn't merge null edges correctly. Correcting this
fixes poolallocation on 175.vpr, and possibly others.

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

lib/Analysis/DataStructure/DataStructure.cpp

index 528a62235ff50de69a64e1a05e0a8b81cde1cd47..5ea414e208cf5afd83746fd214cad8717163038c 100644 (file)
@@ -845,7 +845,7 @@ void ReachabilityCloner::merge(const DSNodeHandle &NH,
   // been cloned.
   const DSNode *SN = SrcNH.getNode();
   DSNodeHandle &SCNH = NodeMap[SN];  // SourceClonedNodeHandle
-  if (SCNH.getNode()) {   // Node already cloned?
+  if (!SCNH.isNull()) {   // Node already cloned?
     NH.mergeWith(DSNodeHandle(SCNH.getNode(),
                               SCNH.getOffset()+SrcNH.getOffset()));
 
@@ -971,10 +971,15 @@ void ReachabilityCloner::merge(const DSNodeHandle &NH,
       if (CN->getSize() != 1)
         MergeOffset = ((i << DS::PointerShift)+SCNH.getOffset()) %CN->getSize();
       
-      // Perform the recursive merging.  Make sure to create a temporary NH,
-      // because the Link can disappear in the process of recursive merging.
-      DSNodeHandle Tmp = CN->getLink(MergeOffset);
-      merge(Tmp, SrcEdge);
+      DSNodeHandle &Link = CN->getLink(MergeOffset);
+      if (!Link.isNull()) {
+        // Perform the recursive merging.  Make sure to create a temporary NH,
+        // because the Link can disappear in the process of recursive merging.
+        DSNodeHandle Tmp = Link;
+        merge(Tmp, SrcEdge);
+      } else {
+        merge(Link, SrcEdge);
+      }
     }
   }
 }
@@ -1214,7 +1219,7 @@ void DSGraph::mergeInGraph(const DSCallSite &CS, Function &F,
     }
     
     // Map the return node pointer over.
-    if (CS.getRetVal().getNode())
+    if (!CS.getRetVal().isNull())
       RC.merge(CS.getRetVal(), Graph.getReturnNodeFor(F));
     
     // If requested, copy the calls or aux-calls lists.