diff options
Diffstat (limited to 'include/llvm/Analysis/BlockFrequencyInfo.h')
| -rw-r--r-- | include/llvm/Analysis/BlockFrequencyInfo.h | 33 | 
1 files changed, 22 insertions, 11 deletions
diff --git a/include/llvm/Analysis/BlockFrequencyInfo.h b/include/llvm/Analysis/BlockFrequencyInfo.h index cbae01c9102f..89370cbeeea1 100644 --- a/include/llvm/Analysis/BlockFrequencyInfo.h +++ b/include/llvm/Analysis/BlockFrequencyInfo.h @@ -18,31 +18,36 @@  #include "llvm/IR/PassManager.h"  #include "llvm/Pass.h"  #include "llvm/Support/BlockFrequency.h" -#include <climits> +#include <cstdint> +#include <memory>  namespace llvm { +class BasicBlock;  class BranchProbabilityInfo; +class Function;  class LoopInfo; +class Module; +class raw_ostream;  template <class BlockT> class BlockFrequencyInfoImpl; +enum PGOViewCountsType { PGOVCT_None, PGOVCT_Graph, PGOVCT_Text }; +  /// BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to  /// estimate IR basic block frequencies.  class BlockFrequencyInfo { -  typedef BlockFrequencyInfoImpl<BasicBlock> ImplType; -  std::unique_ptr<ImplType> BFI; +  using ImplType = BlockFrequencyInfoImpl<BasicBlock>; -  void operator=(const BlockFrequencyInfo &) = delete; -  BlockFrequencyInfo(const BlockFrequencyInfo &) = delete; +  std::unique_ptr<ImplType> BFI;  public:    BlockFrequencyInfo();    BlockFrequencyInfo(const Function &F, const BranchProbabilityInfo &BPI,                       const LoopInfo &LI); +  BlockFrequencyInfo(const BlockFrequencyInfo &) = delete; +  BlockFrequencyInfo &operator=(const BlockFrequencyInfo &) = delete;    BlockFrequencyInfo(BlockFrequencyInfo &&Arg); -    BlockFrequencyInfo &operator=(BlockFrequencyInfo &&RHS); -    ~BlockFrequencyInfo();    /// Handle invalidation explicitly. @@ -70,6 +75,10 @@ public:    /// the enclosing function's count (if available) and returns the value.    Optional<uint64_t> getProfileCountFromFreq(uint64_t Freq) const; +  /// \brief Returns true if \p BB is an irreducible loop header +  /// block. Otherwise false. +  bool isIrrLoopHeader(const BasicBlock *BB); +    // Set the frequency of the given basic block.    void setBlockFreq(const BasicBlock *BB, uint64_t Freq); @@ -100,11 +109,12 @@ public:  class BlockFrequencyAnalysis      : public AnalysisInfoMixin<BlockFrequencyAnalysis> {    friend AnalysisInfoMixin<BlockFrequencyAnalysis>; +    static AnalysisKey Key;  public: -  /// \brief Provide the result typedef for this analysis pass. -  typedef BlockFrequencyInfo Result; +  /// \brief Provide the result type for this analysis pass. +  using Result = BlockFrequencyInfo;    /// \brief Run the analysis pass over a function and produce BFI.    Result run(Function &F, FunctionAnalysisManager &AM); @@ -117,6 +127,7 @@ class BlockFrequencyPrinterPass  public:    explicit BlockFrequencyPrinterPass(raw_ostream &OS) : OS(OS) {} +    PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);  }; @@ -140,6 +151,6 @@ public:    void print(raw_ostream &OS, const Module *M) const override;  }; -} +} // end namespace llvm -#endif +#endif // LLVM_ANALYSIS_BLOCKFREQUENCYINFO_H  | 
