]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/CodeGen/MachinePostDominators.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / CodeGen / MachinePostDominators.h
1 //===- llvm/CodeGen/MachinePostDominators.h ----------------------*- C++ -*-==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file exposes interfaces to post dominance information for
10 // target-specific code.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H
15 #define LLVM_CODEGEN_MACHINEPOSTDOMINATORS_H
16
17 #include "llvm/CodeGen/MachineDominators.h"
18 #include "llvm/CodeGen/MachineFunctionPass.h"
19
20 namespace llvm {
21
22 ///
23 /// PostDominatorTree Class - Concrete subclass of DominatorTree that is used
24 /// to compute the post-dominator tree.
25 ///
26 struct MachinePostDominatorTree : public MachineFunctionPass {
27 private:
28  PostDomTreeBase<MachineBasicBlock> *DT;
29
30 public:
31   static char ID;
32
33   MachinePostDominatorTree();
34
35   ~MachinePostDominatorTree() override;
36
37   FunctionPass *createMachinePostDominatorTreePass();
38
39   const SmallVectorImpl<MachineBasicBlock *> &getRoots() const {
40     return DT->getRoots();
41   }
42
43   MachineDomTreeNode *getRootNode() const {
44     return DT->getRootNode();
45   }
46
47   MachineDomTreeNode *operator[](MachineBasicBlock *BB) const {
48     return DT->getNode(BB);
49   }
50
51   MachineDomTreeNode *getNode(MachineBasicBlock *BB) const {
52     return DT->getNode(BB);
53   }
54
55   bool dominates(const MachineDomTreeNode *A,
56                  const MachineDomTreeNode *B) const {
57     return DT->dominates(A, B);
58   }
59
60   bool dominates(const MachineBasicBlock *A, const MachineBasicBlock *B) const {
61     return DT->dominates(A, B);
62   }
63
64   bool properlyDominates(const MachineDomTreeNode *A,
65                          const MachineDomTreeNode *B) const {
66     return DT->properlyDominates(A, B);
67   }
68
69   bool properlyDominates(const MachineBasicBlock *A,
70                          const MachineBasicBlock *B) const {
71     return DT->properlyDominates(A, B);
72   }
73
74   MachineBasicBlock *findNearestCommonDominator(MachineBasicBlock *A,
75                                                 MachineBasicBlock *B) {
76     return DT->findNearestCommonDominator(A, B);
77   }
78
79   bool runOnMachineFunction(MachineFunction &MF) override;
80   void getAnalysisUsage(AnalysisUsage &AU) const override;
81   void print(llvm::raw_ostream &OS, const Module *M = nullptr) const override;
82 };
83 } //end of namespace llvm
84
85 #endif