| //===- llvm/CodeGen/MachinePostDominators.h ----------------------*- C++ -*-==// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file exposes interfaces to post dominance information for |
| // target-specific code. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H |
| #define LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H |
| |
| #include "llvm/CodeGen/MachineDominators.h" |
| #include "llvm/CodeGen/MachineFunctionPass.h" |
| |
| namespace llvm { |
| |
| /// |
| /// PostDominatorTree Class - Concrete subclass of DominatorTree that is used |
| /// to compute the post-dominator tree. |
| /// |
| struct MachinePostDominatorTree : public MachineFunctionPass { |
| private: |
| PostDomTreeBase<MachineBasicBlock> *DT; |
| |
| public: |
| static char ID; |
| |
| MachinePostDominatorTree(); |
| |
| ~MachinePostDominatorTree() override; |
| |
| FunctionPass *createMachinePostDominatorTreePass(); |
| |
| const SmallVectorImpl<MachineBasicBlock *> &getRoots() const { |
| return DT->getRoots(); |
| } |
| |
| MachineDomTreeNode *getRootNode() const { |
| return DT->getRootNode(); |
| } |
| |
| MachineDomTreeNode *operator[](MachineBasicBlock *BB) const { |
| return DT->getNode(BB); |
| } |
| |
| MachineDomTreeNode *getNode(MachineBasicBlock *BB) const { |
| return DT->getNode(BB); |
| } |
| |
| bool dominates(const MachineDomTreeNode *A, |
| const MachineDomTreeNode *B) const { |
| return DT->dominates(A, B); |
| } |
| |
| bool dominates(const MachineBasicBlock *A, const MachineBasicBlock *B) const { |
| return DT->dominates(A, B); |
| } |
| |
| bool properlyDominates(const MachineDomTreeNode *A, |
| const MachineDomTreeNode *B) const { |
| return DT->properlyDominates(A, B); |
| } |
| |
| bool properlyDominates(const MachineBasicBlock *A, |
| const MachineBasicBlock *B) const { |
| return DT->properlyDominates(A, B); |
| } |
| |
| MachineBasicBlock *findNearestCommonDominator(MachineBasicBlock *A, |
| MachineBasicBlock *B) { |
| return DT->findNearestCommonDominator(A, B); |
| } |
| |
| bool runOnMachineFunction(MachineFunction &MF) override; |
| void getAnalysisUsage(AnalysisUsage &AU) const override; |
| void print(llvm::raw_ostream &OS, const Module *M = nullptr) const override; |
| }; |
| } //end of namespace llvm |
| |
| #endif |