summaryrefslogtreecommitdiff
path: root/include/llvm/Analysis/BlockFrequencyInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Analysis/BlockFrequencyInfo.h')
-rw-r--r--include/llvm/Analysis/BlockFrequencyInfo.h33
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