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