summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Analysis/Dominators.h96
-rw-r--r--include/llvm/Analysis/PostDominators.h108
-rw-r--r--lib/Analysis/PostDominators.cpp6
-rw-r--r--lib/Transforms/Scalar/ADCE.cpp2
4 files changed, 116 insertions, 96 deletions
diff --git a/include/llvm/Analysis/Dominators.h b/include/llvm/Analysis/Dominators.h
index 5ef302f..af45646 100644
--- a/include/llvm/Analysis/Dominators.h
+++ b/include/llvm/Analysis/Dominators.h
@@ -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
index 0000000..3a4ac7f
--- /dev/null
+++ b/include/llvm/Analysis/PostDominators.h
@@ -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
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index c3320ee..8b66ff6 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -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() {
+}
diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp
index 618ff23..15b71fd 100644
--- a/lib/Transforms/Scalar/ADCE.cpp
+++ b/lib/Transforms/Scalar/ADCE.cpp
@@ -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"