1f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//===- llvm/CodeGen/MachineDominanceFrontier.h ------------------*- C++ -*-===//
2f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//
3f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//                     The LLVM Compiler Infrastructure
4f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//
5f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// This file is distributed under the University of Illinois Open Source
6f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// License. See LICENSE.TXT for details.
7f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//
8f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//===----------------------------------------------------------------------===//
9f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
10f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#ifndef LLVM_CODEGEN_MACHINEDOMINANCEFRONTIER_H
11f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#define LLVM_CODEGEN_MACHINEDOMINANCEFRONTIER_H
12f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
13f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/Analysis/DominanceFrontier.h"
14f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/Analysis/DominanceFrontierImpl.h"
15f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/CodeGen/MachineBasicBlock.h"
16f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/CodeGen/MachineFunctionPass.h"
17f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/Support/GenericDomTree.h"
18f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include <vector>
19f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
20f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotnamespace llvm {
21f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
22f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass MachineDominanceFrontier : public MachineFunctionPass {
23f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  ForwardDominanceFrontierBase<MachineBasicBlock> Base;
24f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
25f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic:
26f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot using DomTreeT = DomTreeBase<MachineBasicBlock>;
27f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot using DomTreeNodeT = DomTreeNodeBase<MachineBasicBlock>;
28f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot using DomSetType = DominanceFrontierBase<MachineBasicBlock, false>::DomSetType;
29f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot using iterator = DominanceFrontierBase<MachineBasicBlock, false>::iterator;
30f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot using const_iterator =
31f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot     DominanceFrontierBase<MachineBasicBlock, false>::const_iterator;
32f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
33f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MachineDominanceFrontier(const MachineDominanceFrontier &) = delete;
34f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MachineDominanceFrontier &operator=(const MachineDominanceFrontier &) = delete;
35f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
36f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot static char ID;
37f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
38f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot MachineDominanceFrontier();
39f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
40f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DominanceFrontierBase<MachineBasicBlock, false> &getBase() { return Base; }
41f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
42f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  const SmallVectorImpl<MachineBasicBlock *> &getRoots() const {
43f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot   return Base.getRoots();
44f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
45f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
46f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  MachineBasicBlock *getRoot() const {
47f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.getRoot();
48f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
49f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
50f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  bool isPostDominator() const {
51f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.isPostDominator();
52f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
53f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
54f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  iterator begin() {
55f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.begin();
56f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
57f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
58f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  const_iterator begin() const {
59f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.begin();
60f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
61f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
62f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  iterator end() {
63f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.end();
64f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
65f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
66f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  const_iterator end() const {
67f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.end();
68f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
69f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
70f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  iterator find(MachineBasicBlock *B) {
71f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.find(B);
72f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
73f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
74f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  const_iterator find(MachineBasicBlock *B) const {
75f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.find(B);
76f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
77f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
78f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  iterator addBasicBlock(MachineBasicBlock *BB, const DomSetType &frontier) {
79f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.addBasicBlock(BB, frontier);
80f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
81f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
82f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  void removeBlock(MachineBasicBlock *BB) {
83f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.removeBlock(BB);
84f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
85f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
86f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  void addToFrontier(iterator I, MachineBasicBlock *Node) {
87f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.addToFrontier(I, Node);
88f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
89f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
90f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  void removeFromFrontier(iterator I, MachineBasicBlock *Node) {
91f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.removeFromFrontier(I, Node);
92f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
93f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
94f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  bool compareDomSet(DomSetType &DS1, const DomSetType &DS2) const {
95f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.compareDomSet(DS1, DS2);
96f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
97f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
98f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  bool compare(DominanceFrontierBase<MachineBasicBlock, false> &Other) const {
99f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot    return Base.compare(Other);
100f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  }
101f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
102f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  bool runOnMachineFunction(MachineFunction &F) override;
103f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
104f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  void releaseMemory() override;
105f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
106f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot  void getAnalysisUsage(AnalysisUsage &AU) const override;
107f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot};
108f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
109f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot} // end namespace llvm
110f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot
111f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#endif // LLVM_CODEGEN_MACHINEDOMINANCEFRONTIER_H
112