Move node forwarding code from being inlined to being out-of-line.
authorChris Lattner <sabre@nondot.org>
Thu, 13 Feb 2003 19:09:00 +0000 (19:09 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 13 Feb 2003 19:09:00 +0000 (19:09 +0000)
This brings a 11.6% speedup to steens, and a 3.6 overall speedup to ds-aa

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

include/llvm/Analysis/DSNode.h
include/llvm/Analysis/DSSupport.h
include/llvm/Analysis/DataStructure/DSNode.h
include/llvm/Analysis/DataStructure/DSSupport.h
lib/Analysis/DataStructure/DataStructure.cpp

index c7edc5547e9b2ad286a697915c46de3e7508cc4b..ce7f53be6b55a1d73de0c13593b12d9fc065299b 100644 (file)
@@ -276,22 +276,7 @@ inline DSNode *DSNodeHandle::getNode() const {
   if (!N || N->ForwardNH.isNull())
     return N;
 
-  // Handle node forwarding here!
-  DSNode *Next = N->ForwardNH.getNode();  // Cause recursive shrinkage
-  Offset += N->ForwardNH.getOffset();
-
-  if (--N->NumReferrers == 0) {
-    // Removing the last referrer to the node, sever the forwarding link
-    N->stopForwarding();
-  }
-
-  N = Next;
-  N->NumReferrers++;
-  if (N->Size <= Offset) {
-    assert(N->Size <= 1 && "Forwarded to shrunk but not collapsed node?");
-    Offset = 0;
-  }
-  return N;
+  return HandleForwarding();
 }
 
 inline void DSNodeHandle::setNode(DSNode *n) {
index a36ce66b34c976045ba708ce902eff4c2f083878..d36be9bb3aff300e8ddd846bfea548b65971cd9a 100644 (file)
@@ -112,6 +112,8 @@ public:
   inline DSNodeHandle &getLink(unsigned Num);
 
   inline void setLink(unsigned Num, const DSNodeHandle &NH);
+private:
+  DSNode *HandleForwarding() const;
 };
 
 namespace std {
index c7edc5547e9b2ad286a697915c46de3e7508cc4b..ce7f53be6b55a1d73de0c13593b12d9fc065299b 100644 (file)
@@ -276,22 +276,7 @@ inline DSNode *DSNodeHandle::getNode() const {
   if (!N || N->ForwardNH.isNull())
     return N;
 
-  // Handle node forwarding here!
-  DSNode *Next = N->ForwardNH.getNode();  // Cause recursive shrinkage
-  Offset += N->ForwardNH.getOffset();
-
-  if (--N->NumReferrers == 0) {
-    // Removing the last referrer to the node, sever the forwarding link
-    N->stopForwarding();
-  }
-
-  N = Next;
-  N->NumReferrers++;
-  if (N->Size <= Offset) {
-    assert(N->Size <= 1 && "Forwarded to shrunk but not collapsed node?");
-    Offset = 0;
-  }
-  return N;
+  return HandleForwarding();
 }
 
 inline void DSNodeHandle::setNode(DSNode *n) {
index a36ce66b34c976045ba708ce902eff4c2f083878..d36be9bb3aff300e8ddd846bfea548b65971cd9a 100644 (file)
@@ -112,6 +112,8 @@ public:
   inline DSNodeHandle &getLink(unsigned Num);
 
   inline void setLink(unsigned Num, const DSNodeHandle &NH);
+private:
+  DSNode *HandleForwarding() const;
 };
 
 namespace std {
index 80586de2f141a8911c0fc34afa0cd5d5111c1a52..f2817623d2207e12892760919cc6c090f12d6199 100644 (file)
@@ -24,6 +24,27 @@ namespace DS {   // TODO: FIXME
 }
 using namespace DS;
 
+DSNode *DSNodeHandle::HandleForwarding() const {
+  assert(!N->ForwardNH.isNull() && "Can only be invoked if forwarding!");
+
+  // Handle node forwarding here!
+  DSNode *Next = N->ForwardNH.getNode();  // Cause recursive shrinkage
+  Offset += N->ForwardNH.getOffset();
+
+  if (--N->NumReferrers == 0) {
+    // Removing the last referrer to the node, sever the forwarding link
+    N->stopForwarding();
+  }
+
+  N = Next;
+  N->NumReferrers++;
+  if (N->Size <= Offset) {
+    assert(N->Size <= 1 && "Forwarded to shrunk but not collapsed node?");
+    Offset = 0;
+  }
+  return N;
+}
+
 //===----------------------------------------------------------------------===//
 // DSNode Implementation
 //===----------------------------------------------------------------------===//