diff options
| author | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 17:54:15 +0000 |
|---|---|---|
| committer | Hongbin Zheng <etherzhhb@gmail.com> | 2016-02-25 17:54:15 +0000 |
| commit | 751337faa75179b57a315887f9dc6d8166eb0776 (patch) | |
| tree | de1d2ee8dbc5df8ecdceddab4f5cc49e5aa915e4 /llvm/include | |
| parent | 3f97840721817d36d5bb5348a628b1d20c8fc4c3 (diff) | |
| download | bcm5719-llvm-751337faa75179b57a315887f9dc6d8166eb0776.tar.gz bcm5719-llvm-751337faa75179b57a315887f9dc6d8166eb0776.zip | |
Introduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFrontier. NFC
Differential Revision: http://reviews.llvm.org/D17570
llvm-svn: 261903
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Analysis/DominanceFrontier.h | 88 | ||||
| -rw-r--r-- | llvm/include/llvm/InitializePasses.h | 2 |
2 files changed, 43 insertions, 47 deletions
diff --git a/llvm/include/llvm/Analysis/DominanceFrontier.h b/llvm/include/llvm/Analysis/DominanceFrontier.h index fb730054a8e..b4b8a6baf0a 100644 --- a/llvm/include/llvm/Analysis/DominanceFrontier.h +++ b/llvm/include/llvm/Analysis/DominanceFrontier.h @@ -24,6 +24,11 @@ namespace llvm { +// FIXME: Replace this brittle forward declaration with the include of the new +// PassManager.h when doing so doesn't break the PassManagerBuilder. +template <typename IRUnitT> class AnalysisManager; +class PreservedAnalyses; + //===----------------------------------------------------------------------===// /// DominanceFrontierBase - Common base class for computing forward and inverse /// dominance frontiers for a function. @@ -133,78 +138,69 @@ public: const DomSetType &calculate(const DomTreeT &DT, const DomTreeNodeT *Node); }; -class DominanceFrontier : public FunctionPass { - ForwardDominanceFrontierBase<BasicBlock> Base; - +class DominanceFrontier : public ForwardDominanceFrontierBase<BasicBlock> { public: typedef DominatorTreeBase<BasicBlock> DomTreeT; typedef DomTreeNodeBase<BasicBlock> DomTreeNodeT; typedef DominanceFrontierBase<BasicBlock>::DomSetType DomSetType; typedef DominanceFrontierBase<BasicBlock>::iterator iterator; typedef DominanceFrontierBase<BasicBlock>::const_iterator const_iterator; +}; +class DominanceFrontierWrapperPass : public FunctionPass { + DominanceFrontier DF; +public: static char ID; // Pass ID, replacement for typeid - DominanceFrontier(); - - ForwardDominanceFrontierBase<BasicBlock> &getBase() { return Base; } - - inline const std::vector<BasicBlock *> &getRoots() const { - return Base.getRoots(); - } - - BasicBlock *getRoot() const { return Base.getRoot(); } - - bool isPostDominator() const { return Base.isPostDominator(); } + DominanceFrontierWrapperPass(); - iterator begin() { return Base.begin(); } + DominanceFrontier &getDominanceFrontier() { return DF; } + const DominanceFrontier &getDominanceFrontier() const { return DF; } - const_iterator begin() const { return Base.begin(); } - - iterator end() { return Base.end(); } - - const_iterator end() const { return Base.end(); } + void releaseMemory() override; - iterator find(BasicBlock *B) { return Base.find(B); } + bool runOnFunction(Function &) override; - const_iterator find(BasicBlock *B) const { return Base.find(B); } + void getAnalysisUsage(AnalysisUsage &AU) const override; - iterator addBasicBlock(BasicBlock *BB, const DomSetType &frontier) { - return Base.addBasicBlock(BB, frontier); - } + void print(raw_ostream &OS, const Module * = nullptr) const override; - void removeBlock(BasicBlock *BB) { return Base.removeBlock(BB); } + void dump() const; +}; - void addToFrontier(iterator I, BasicBlock *Node) { - return Base.addToFrontier(I, Node); - } +extern template class DominanceFrontierBase<BasicBlock>; +extern template class ForwardDominanceFrontierBase<BasicBlock>; - void removeFromFrontier(iterator I, BasicBlock *Node) { - return Base.removeFromFrontier(I, Node); - } +/// \brief Analysis pass which computes a \c DominanceFrontier. +class DominanceFrontierAnalysis { +public: + /// \brief Provide the result typedef for this analysis pass. + typedef DominanceFrontier Result; - bool compareDomSet(DomSetType &DS1, const DomSetType &DS2) const { - return Base.compareDomSet(DS1, DS2); - } + /// \brief Opaque, unique identifier for this analysis pass. + static void *ID() { return (void *)&PassID; } - bool compare(DominanceFrontierBase<BasicBlock> &Other) const { - return Base.compare(Other); - } + /// \brief Run the analysis pass over a function and produce a dominator tree. + DominanceFrontier run(Function &F, AnalysisManager<Function> *AM); - void releaseMemory() override; + /// \brief Provide access to a name for this pass for debugging purposes. + static StringRef name() { return "DominanceFrontierAnalysis"; } - bool runOnFunction(Function &) override; +private: + static char PassID; +}; - void getAnalysisUsage(AnalysisUsage &AU) const override; +/// \brief Printer pass for the \c DominanceFrontier. +class DominanceFrontierPrinterPass { + raw_ostream &OS; - void print(raw_ostream &OS, const Module * = nullptr) const override; +public: + explicit DominanceFrontierPrinterPass(raw_ostream &OS); + PreservedAnalyses run(Function &F, AnalysisManager<Function> *AM); - void dump() const; + static StringRef name() { return "DominanceFrontierAnalysis"; } }; -extern template class DominanceFrontierBase<BasicBlock>; -extern template class ForwardDominanceFrontierBase<BasicBlock>; - } // End llvm namespace #endif diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 5f2b886a18a..c5fae37000d 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -111,7 +111,7 @@ void initializeDomOnlyPrinterPass(PassRegistry&); void initializeDomOnlyViewerPass(PassRegistry&); void initializeDomPrinterPass(PassRegistry&); void initializeDomViewerPass(PassRegistry&); -void initializeDominanceFrontierPass(PassRegistry&); +void initializeDominanceFrontierWrapperPassPass(PassRegistry&); void initializeDominatorTreeWrapperPassPass(PassRegistry&); void initializeEarlyIfConverterPass(PassRegistry&); void initializeEdgeBundlesPass(PassRegistry&); |

