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