1 //=- llvm/CodeGen/MachineDominators.h ----------------------------*- C++ -*-==// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file exposes interfaces to post dominance information for 11 // target-specific code. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H 16 #define LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H 17 18 #include "llvm/Analysis/Dominators.h" 19 #include "llvm/CodeGen/MachineDominators.h" 20 #include "llvm/CodeGen/MachineFunctionPass.h" 21 22 namespace llvm { 23 24 /// 25 /// PostDominatorTree Class - Concrete subclass of DominatorTree that is used 26 /// to compute the a post-dominator tree. 27 /// 28 struct MachinePostDominatorTree : public MachineFunctionPass { 29 private: 30 DominatorTreeBase<MachineBasicBlock> *DT; 31 32 public: 33 static char ID; 34 35 MachinePostDominatorTree(); 36 37 ~MachinePostDominatorTree(); 38 39 FunctionPass *createMachinePostDominatorTreePass(); 40 getRootsMachinePostDominatorTree41 const std::vector<MachineBasicBlock *> &getRoots() const { 42 return DT->getRoots(); 43 } 44 getRootNodeMachinePostDominatorTree45 MachineDomTreeNode *getRootNode() const { 46 return DT->getRootNode(); 47 } 48 49 MachineDomTreeNode *operator[](MachineBasicBlock *BB) const { 50 return DT->getNode(BB); 51 } 52 getNodeMachinePostDominatorTree53 MachineDomTreeNode *getNode(MachineBasicBlock *BB) const { 54 return DT->getNode(BB); 55 } 56 dominatesMachinePostDominatorTree57 bool dominates(const MachineDomTreeNode *A, 58 const MachineDomTreeNode *B) const { 59 return DT->dominates(A, B); 60 } 61 dominatesMachinePostDominatorTree62 bool dominates(const MachineBasicBlock *A, const MachineBasicBlock *B) const { 63 return DT->dominates(A, B); 64 } 65 properlyDominatesMachinePostDominatorTree66 bool properlyDominates(const MachineDomTreeNode *A, 67 const MachineDomTreeNode *B) const { 68 return DT->properlyDominates(A, B); 69 } 70 properlyDominatesMachinePostDominatorTree71 bool properlyDominates(const MachineBasicBlock *A, 72 const MachineBasicBlock *B) const { 73 return DT->properlyDominates(A, B); 74 } 75 findNearestCommonDominatorMachinePostDominatorTree76 MachineBasicBlock *findNearestCommonDominator(MachineBasicBlock *A, 77 MachineBasicBlock *B) { 78 return DT->findNearestCommonDominator(A, B); 79 } 80 81 virtual bool runOnMachineFunction(MachineFunction &MF); 82 virtual void getAnalysisUsage(AnalysisUsage &AU) const; 83 virtual void print(llvm::raw_ostream &OS, const Module *M = 0) const; 84 }; 85 } //end of namespace llvm 86 87 #endif 88