- Split Dominators.h into Dominators.h & PostDominators.h
authorChris Lattner <sabre@nondot.org>
Wed, 21 Aug 2002 23:43:50 +0000 (23:43 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 21 Aug 2002 23:43:50 +0000 (23:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3432 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/Dominators.h
include/llvm/Analysis/PostDominators.h [new file with mode: 0644]
lib/Analysis/PostDominators.cpp
lib/Transforms/Scalar/ADCE.cpp

index 5ef302fef38ff7808b98f07adb0c9336fef064ed..af45646493f8d45c07b8dae0d738d286f56f0b6b 100644 (file)
@@ -15,8 +15,8 @@
 // 
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_DOMINATORS_H
-#define LLVM_DOMINATORS_H
+#ifndef LLVM_ANALYSIS_DOMINATORS_H
+#define LLVM_ANALYSIS_DOMINATORS_H
 
 #include "llvm/Pass.h"
 #include <set>
@@ -108,25 +108,6 @@ struct DominatorSet : public DominatorSetBase {
 };
 
 
-//===-------------------------------------
-// DominatorSet Class - Concrete subclass of DominatorSetBase that is used to
-// compute the post-dominator set.
-//
-struct PostDominatorSet : public DominatorSetBase {
-  PostDominatorSet() : DominatorSetBase(true) {}
-
-  virtual bool runOnFunction(Function &F);
-
-  // getAnalysisUsage - This obviously provides a dominator set, but it also
-  // uses the UnifyFunctionExitNode pass if building post-dominators
-  //
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const;
-};
-
-
-
-
-
 //===----------------------------------------------------------------------===//
 //
 // ImmediateDominators - Calculate the immediate dominator for each node in a
@@ -182,29 +163,6 @@ struct ImmediateDominators : public ImmediateDominatorsBase {
 };
 
 
-//===-------------------------------------
-// ImmediatePostDominators Class - Concrete subclass of ImmediateDominatorsBase
-// that is used to compute the immediate post-dominators.
-//
-struct ImmediatePostDominators : public ImmediateDominatorsBase {
-  ImmediatePostDominators() : ImmediateDominatorsBase(true) {}
-
-  virtual bool runOnFunction(Function &F) {
-    IDoms.clear();     // Reset from the last time we were run...
-    PostDominatorSet &DS = getAnalysis<PostDominatorSet>();
-    Root = DS.getRoot();
-    calcIDoms(DS);
-    return false;
-  }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.setPreservesAll();
-    AU.addRequired<PostDominatorSet>();
-  }
-};
-
-
-
 //===----------------------------------------------------------------------===//
 //
 // DominatorTree - Calculate the immediate dominator tree for a function.
@@ -284,30 +242,6 @@ private:
 };
 
 
-//===-------------------------------------
-// PostDominatorTree Class - Concrete subclass of DominatorTree that is used to
-// compute the a post-dominator tree.
-//
-struct PostDominatorTree : public DominatorTreeBase {
-  PostDominatorTree() : DominatorTreeBase(true) {}
-
-  virtual bool runOnFunction(Function &F) {
-    reset();     // Reset from the last time we were run...
-    PostDominatorSet &DS = getAnalysis<PostDominatorSet>();
-    Root = DS.getRoot();
-    calculate(DS);
-    return false;
-  }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.setPreservesAll();
-    AU.addRequired<PostDominatorSet>();
-  }
-private:
-  void calculate(const PostDominatorSet &DS);
-};
-
-
 //===----------------------------------------------------------------------===//
 //
 // DominanceFrontier - Calculate the dominance frontiers for a function.
@@ -358,30 +292,4 @@ private:
                               const DominatorTree::Node *Node);
 };
 
-
-//===-------------------------------------
-
-// PostDominanceFrontier Class - Concrete subclass of DominanceFrontier that is
-// used to compute the a post-dominance frontier.
-//
-struct PostDominanceFrontier : public DominanceFrontierBase {
-  PostDominanceFrontier() : DominanceFrontierBase(true) {}
-
-  virtual bool runOnFunction(Function &) {
-    Frontiers.clear();
-    PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
-    Root = DT.getRoot();
-    calculate(DT, DT[Root]);
-    return false;
-  }
-
-  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-    AU.setPreservesAll();
-    AU.addRequired<PostDominatorTree>();
-  }
-private:
-  const DomSetType &calculate(const PostDominatorTree &DT,
-                              const DominatorTree::Node *Node);
-};
-
 #endif
diff --git a/include/llvm/Analysis/PostDominators.h b/include/llvm/Analysis/PostDominators.h
new file mode 100644 (file)
index 0000000..3a4ac7f
--- /dev/null
@@ -0,0 +1,108 @@
+//=- llvm/Analysis/PostDominators.h - Post Dominator Calculation -*- C++ -*--=//
+//
+// This file exposes interfaces to post dominance information.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_POST_DOMINATORS_H
+#define LLVM_ANALYSIS_POST_DOMINATORS_H
+
+#include "llvm/Analysis/Dominators.h"
+
+
+//===-------------------------------------
+// DominatorSet Class - Concrete subclass of DominatorSetBase that is used to
+// compute the post-dominator set.
+//
+struct PostDominatorSet : public DominatorSetBase {
+  PostDominatorSet() : DominatorSetBase(true) {}
+
+  virtual bool runOnFunction(Function &F);
+
+  // getAnalysisUsage - This obviously provides a dominator set, but it also
+  // uses the UnifyFunctionExitNode pass if building post-dominators
+  //
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const;
+};
+
+
+
+//===-------------------------------------
+// ImmediatePostDominators Class - Concrete subclass of ImmediateDominatorsBase
+// that is used to compute the immediate post-dominators.
+//
+struct ImmediatePostDominators : public ImmediateDominatorsBase {
+  ImmediatePostDominators() : ImmediateDominatorsBase(true) {}
+
+  virtual bool runOnFunction(Function &F) {
+    IDoms.clear();     // Reset from the last time we were run...
+    PostDominatorSet &DS = getAnalysis<PostDominatorSet>();
+    Root = DS.getRoot();
+    calcIDoms(DS);
+    return false;
+  }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+    AU.addRequired<PostDominatorSet>();
+  }
+};
+
+
+//===-------------------------------------
+// PostDominatorTree Class - Concrete subclass of DominatorTree that is used to
+// compute the a post-dominator tree.
+//
+struct PostDominatorTree : public DominatorTreeBase {
+  PostDominatorTree() : DominatorTreeBase(true) {}
+
+  virtual bool runOnFunction(Function &F) {
+    reset();     // Reset from the last time we were run...
+    PostDominatorSet &DS = getAnalysis<PostDominatorSet>();
+    Root = DS.getRoot();
+    calculate(DS);
+    return false;
+  }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+    AU.addRequired<PostDominatorSet>();
+  }
+private:
+  void calculate(const PostDominatorSet &DS);
+};
+
+
+//===-------------------------------------
+// PostDominanceFrontier Class - Concrete subclass of DominanceFrontier that is
+// used to compute the a post-dominance frontier.
+//
+struct PostDominanceFrontier : public DominanceFrontierBase {
+  PostDominanceFrontier() : DominanceFrontierBase(true) {}
+
+  virtual bool runOnFunction(Function &) {
+    Frontiers.clear();
+    PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
+    Root = DT.getRoot();
+    calculate(DT, DT[Root]);
+    return false;
+  }
+
+  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+    AU.setPreservesAll();
+    AU.addRequired<PostDominatorTree>();
+  }
+
+  // stub - dummy function, just ignore it
+  static void stub();
+
+private:
+  const DomSetType &calculate(const PostDominatorTree &DT,
+                              const DominatorTree::Node *Node);
+};
+
+// Make sure that any clients of this file link in PostDominators.cpp
+static IncludeFile
+POST_DOMINATOR_INCLUDE_FILE((void*)&PostDominanceFrontier::stub);
+
+#endif
index c3320ee3db8f85a3d7f8446fb31e0b0a6c4f9496..8b66ff6cad12f38cb872aadc465e432c97e9c61e 100644 (file)
@@ -4,7 +4,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/Analysis/Dominators.h"
+#include "llvm/Analysis/PostDominators.h"
 #include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
 #include "llvm/Support/CFG.h"
 #include "Support/DepthFirstIterator.h"
@@ -183,3 +183,7 @@ PostDominanceFrontier::calculate(const PostDominatorTree &DT,
 
   return S;
 }
+
+// stub - a dummy function to make linking work ok.
+void PostDominanceFrontier::stub() {
+}
index 618ff23b4fbb70482af6be38011a41a227591e89..15b71fdf55ff7310aab707c3d195ab8339f302bd 100644 (file)
@@ -10,7 +10,7 @@
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
 #include "llvm/Type.h"
-#include "llvm/Analysis/Dominators.h"
+#include "llvm/Analysis/PostDominators.h"
 #include "llvm/iTerminators.h"
 #include "llvm/iPHINode.h"
 #include "llvm/Constant.h"