Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

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