//===- llvm/Analysis/DominanceFrontier.h - Dominator Frontiers --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the DominanceFrontier class, which calculate and holds the // dominance frontier for a function. // // This should be considered deprecated, don't add any more uses of this data // structure. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_DOMINANCEFRONTIER_H #define LLVM_ANALYSIS_DOMINANCEFRONTIER_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/SetVector.h" #include "llvm/IR/PassManager.h" #include "llvm/Pass.h" #include "llvm/Support/GenericDomTree.h" #include <cassert> #include <utility> namespace llvm { class BasicBlock; class Function; class raw_ostream; //===----------------------------------------------------------------------===// /// DominanceFrontierBase - Common base class for computing forward and inverse /// dominance frontiers for a function. /// template <class BlockT, bool IsPostDom> class DominanceFrontierBase { … }; //===------------------------------------- /// DominanceFrontier Class - Concrete subclass of DominanceFrontierBase that is /// used to compute a forward dominator frontiers. /// template <class BlockT> class ForwardDominanceFrontierBase : public DominanceFrontierBase<BlockT, false> { … }; class DominanceFrontier : public ForwardDominanceFrontierBase<BasicBlock> { … }; class DominanceFrontierWrapperPass : public FunctionPass { … }; extern template class DominanceFrontierBase<BasicBlock, false>; extern template class DominanceFrontierBase<BasicBlock, true>; extern template class ForwardDominanceFrontierBase<BasicBlock>; /// Analysis pass which computes a \c DominanceFrontier. class DominanceFrontierAnalysis : public AnalysisInfoMixin<DominanceFrontierAnalysis> { … }; /// Printer pass for the \c DominanceFrontier. class DominanceFrontierPrinterPass : public PassInfoMixin<DominanceFrontierPrinterPass> { … }; } // end namespace llvm #endif // LLVM_ANALYSIS_DOMINANCEFRONTIER_H