diff options
author | Owen Anderson <resistor@mac.com> | 2007-04-07 07:17:27 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2007-04-07 07:17:27 +0000 |
commit | ba43963e96c9eb28d4f6862e46c5d3fbdc1f3b96 (patch) | |
tree | c7431cd8d0b9ae7636f55866f7afbf1f76bb827a /include | |
parent | 4f9e58ecdf247f87a9b7cef69b1fa37fb5b07f0d (diff) |
Completely purge DomSet. This is the (hopefully) final patch for PR1171.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35731 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Analysis/Dominators.h | 127 | ||||
-rw-r--r-- | include/llvm/Analysis/PostDominators.h | 23 | ||||
-rw-r--r-- | include/llvm/LinkAllPasses.h | 1 | ||||
-rw-r--r-- | include/llvm/Transforms/Utils/BasicBlockUtils.h | 2 | ||||
-rw-r--r-- | include/llvm/Transforms/Utils/FunctionUtils.h | 1 |
5 files changed, 2 insertions, 152 deletions
diff --git a/include/llvm/Analysis/Dominators.h b/include/llvm/Analysis/Dominators.h index 1a6320fde3..c359fb80fb 100644 --- a/include/llvm/Analysis/Dominators.h +++ b/include/llvm/Analysis/Dominators.h @@ -10,8 +10,7 @@ // This file defines the following classes: // 1. ImmediateDominators: Calculates and holds a mapping between BasicBlocks // and their immediate dominator. -// 2. DominatorSet: Calculates the [reverse] dominator set for a function -// 3. DominatorTree: Represent the ImmediateDominator as an explicit tree +// 2. DominatorTree: Represent the ImmediateDominator as an explicit tree // structure. // 4. ETForest: Efficient data structure for dominance comparisons and // nearest-common-ancestor queries. @@ -175,127 +174,6 @@ private: void Link(BasicBlock *V, BasicBlock *W, InfoRec &WInfo); }; - - -//===----------------------------------------------------------------------===// -/// DominatorSet - Maintain a set<BasicBlock*> for every basic block in a -/// function, that represents the blocks that dominate the block. If the block -/// is unreachable in this function, the set will be empty. This cannot happen -/// for reachable code, because every block dominates at least itself. -/// -class DominatorSetBase : public DominatorBase { -public: - typedef std::set<BasicBlock*> DomSetType; // Dom set for a bb - // Map of dom sets - typedef std::map<BasicBlock*, DomSetType> DomSetMapType; -protected: - DomSetMapType Doms; -public: - DominatorSetBase(bool isPostDom) : DominatorBase(isPostDom) {} - - virtual void releaseMemory() { Doms.clear(); } - - // Accessor interface: - typedef DomSetMapType::const_iterator const_iterator; - typedef DomSetMapType::iterator iterator; - inline const_iterator begin() const { return Doms.begin(); } - inline iterator begin() { return Doms.begin(); } - inline const_iterator end() const { return Doms.end(); } - inline iterator end() { return Doms.end(); } - inline const_iterator find(BasicBlock* B) const { return Doms.find(B); } - inline iterator find(BasicBlock* B) { return Doms.find(B); } - - - /// getDominators - Return the set of basic blocks that dominate the specified - /// block. - /// - inline const DomSetType &getDominators(BasicBlock *BB) const { - const_iterator I = find(BB); - assert(I != end() && "BB not in function!"); - return I->second; - } - - /// isReachable - Return true if the specified basicblock is reachable. If - /// the block is reachable, we have dominator set information for it. - /// - bool isReachable(BasicBlock *BB) const { - return !getDominators(BB).empty(); - } - - /// dominates - Return true if A dominates B. - /// - inline bool dominates(BasicBlock *A, BasicBlock *B) const { - return getDominators(B).count(A) != 0; - } - - /// properlyDominates - Return true if A dominates B and A != B. - /// - bool properlyDominates(BasicBlock *A, BasicBlock *B) const { - return dominates(A, B) && A != B; - } - - /// print - Convert to human readable form - /// - virtual void print(std::ostream &OS, const Module* = 0) const; - void print(std::ostream *OS, const Module* M = 0) const { - if (OS) print(*OS, M); - } - - /// dominates - Return true if A dominates B. This performs the special - /// checks necessary if A and B are in the same basic block. - /// - bool dominates(Instruction *A, Instruction *B) const; - - //===--------------------------------------------------------------------===// - // API to update (Post)DominatorSet information based on modifications to - // the CFG... - - /// addBasicBlock - Call to update the dominator set with information about a - /// new block that was inserted into the function. - /// - void addBasicBlock(BasicBlock *BB, const DomSetType &Dominators) { - assert(find(BB) == end() && "Block already in DominatorSet!"); - Doms.insert(std::make_pair(BB, Dominators)); - } - - /// addDominator - If a new block is inserted into the CFG, then method may be - /// called to notify the blocks it dominates that it is in their set. - /// - void addDominator(BasicBlock *BB, BasicBlock *NewDominator) { - iterator I = find(BB); - assert(I != end() && "BB is not in DominatorSet!"); - I->second.insert(NewDominator); - } -}; - - -//===------------------------------------- -/// DominatorSet Class - Concrete subclass of DominatorSetBase that is used to -/// compute a normal dominator set. -/// -class DominatorSet : public DominatorSetBase { -public: - DominatorSet() : DominatorSetBase(false) {} - - virtual bool runOnFunction(Function &F); - - BasicBlock *getRoot() const { - assert(Roots.size() == 1 && "Should always have entry node!"); - return Roots[0]; - } - - /// getAnalysisUsage - This simply provides a dominator set - /// - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequired<ImmediateDominators>(); - AU.setPreservesAll(); - } - - // stub - dummy function, just ignore it - static int stub; -}; - - //===----------------------------------------------------------------------===// /// DominatorTree - Calculate the immediate dominator tree for a function. /// @@ -691,7 +569,4 @@ private: } // End llvm namespace -// Make sure that any clients of this file link in Dominators.cpp -FORCE_DEFINING_FILE_TO_BE_LINKED(DominatorSet) - #endif diff --git a/include/llvm/Analysis/PostDominators.h b/include/llvm/Analysis/PostDominators.h index 4d8d140373..aea901374e 100644 --- a/include/llvm/Analysis/PostDominators.h +++ b/include/llvm/Analysis/PostDominators.h @@ -38,29 +38,6 @@ private: void Link(BasicBlock *V, BasicBlock *W, InfoRec &WInfo); }; -/// PostDominatorSet Class - Concrete subclass of DominatorSetBase that is used -/// to compute the post-dominator set. Because there can be multiple exit nodes -/// in an LLVM function, we calculate post dominators with a special null block -/// which is the virtual exit node that the real exit nodes all virtually branch -/// to. Clients should be prepared to see an entry in the dominator sets with a -/// null BasicBlock*. -/// -struct PostDominatorSet : public DominatorSetBase { - PostDominatorSet() : DominatorSetBase(true) {} - - virtual bool runOnFunction(Function &F); - - /// getAnalysisUsage - This simply provides a dominator set - /// - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequired<ImmediatePostDominators>(); - AU.setPreservesAll(); - } - - // stub - dummy function, just ignore it - static void stub(); -}; - /// PostDominatorTree Class - Concrete subclass of DominatorTree that is used to /// compute the a post-dominator tree. /// diff --git a/include/llvm/LinkAllPasses.h b/include/llvm/LinkAllPasses.h index 6d85154eae..7481c82025 100644 --- a/include/llvm/LinkAllPasses.h +++ b/include/llvm/LinkAllPasses.h @@ -114,7 +114,6 @@ namespace { (void)new llvm::IntervalPartition(); (void)new llvm::ImmediateDominators(); - (void)new llvm::PostDominatorSet(); (void)new llvm::FindUsedTypes(); (void)new llvm::ScalarEvolution(); ((llvm::Function*)0)->viewCFGOnly(); diff --git a/include/llvm/Transforms/Utils/BasicBlockUtils.h b/include/llvm/Transforms/Utils/BasicBlockUtils.h index 25f3839dc7..9c49c5e685 100644 --- a/include/llvm/Transforms/Utils/BasicBlockUtils.h +++ b/include/llvm/Transforms/Utils/BasicBlockUtils.h @@ -61,7 +61,7 @@ bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum, bool AllowIdenticalEdges = false); /// SplitCriticalEdge - If this edge is a critical edge, insert a new node to -/// split the critical edge. This will update DominatorSet, ImmediateDominator, +/// split the critical edge. This will update ETForest, ImmediateDominator, /// DominatorTree, and DominatorFrontier information if it is available, thus /// calling this pass will not invalidate either of them. This returns true if /// the edge was split, false otherwise. If MergeIdenticalEdges is true (the diff --git a/include/llvm/Transforms/Utils/FunctionUtils.h b/include/llvm/Transforms/Utils/FunctionUtils.h index 12291cb473..a09c9010c6 100644 --- a/include/llvm/Transforms/Utils/FunctionUtils.h +++ b/include/llvm/Transforms/Utils/FunctionUtils.h @@ -19,7 +19,6 @@ namespace llvm { class BasicBlock; - class DominatorSet; class Function; class Loop; |