llvm.org GIT mirror llvm / release_40 include / llvm / CodeGen / MachineBlockFrequencyInfo.h
release_40

Tree @release_40 (Download .tar.gz)

MachineBlockFrequencyInfo.h @release_40

e9139c6
59a9dab
 
 
 
 
 
 
 
 
 
 
 
14a7367
 
59a9dab
9e588d8
59a9dab
9a24f1f
59a9dab
 
 
 
066b5d8
59a9dab
3c371e9
59a9dab
e9139c6
 
f55c1c8
3c371e9
27e1ca8
59a9dab
 
 
 
f55c1c8
59a9dab
c16fc54
59a9dab
9f998de
59a9dab
9f998de
59a9dab
27e1ca8
 
23f34f1
 
59a9dab
23f34f1
 
25101bb
eae8ef4
9e588d8
e9e0746
9e588d8
8451e1b
2aa8ecf
eae8ef4
a73959a
 
 
 
 
 
 
 
 
 
523823b
a73959a
59a9dab
 
cd52a7a
59a9dab
 
//===- MachineBlockFrequencyInfo.h - MBB Frequency Analysis -*- C++ -*-----===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Loops should be simplified before this analysis.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H
#define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H

#include "llvm/ADT/Optional.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/Support/BlockFrequency.h"
#include <climits>

namespace llvm {

class MachineBasicBlock;
class MachineBranchProbabilityInfo;
template <class BlockT> class BlockFrequencyInfoImpl;

/// MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation
/// to estimate machine basic block frequencies.
class MachineBlockFrequencyInfo : public MachineFunctionPass {
  typedef BlockFrequencyInfoImpl<MachineBasicBlock> ImplType;
  std::unique_ptr<ImplType> MBFI;

public:
  static char ID;

  MachineBlockFrequencyInfo();

  ~MachineBlockFrequencyInfo() override;

  void getAnalysisUsage(AnalysisUsage &AU) const override;

  bool runOnMachineFunction(MachineFunction &F) override;

  void releaseMemory() override;

  /// getblockFreq - Return block frequency. Return 0 if we don't have the
  /// information. Please note that initial frequency is equal to 1024. It means
  /// that we should not rely on the value itself, but only on the comparison to
  /// the other block frequencies. We do this to avoid using of floating points.
  ///
  BlockFrequency getBlockFreq(const MachineBasicBlock *MBB) const;

  Optional<uint64_t> getBlockProfileCount(const MachineBasicBlock *MBB) const;
  Optional<uint64_t> getProfileCountFromFreq(uint64_t Freq) const;

  const MachineFunction *getFunction() const;
  const MachineBranchProbabilityInfo *getMBPI() const;
  void view() const;

  // Print the block frequency Freq to OS using the current functions entry
  // frequency to convert freq into a relative decimal form.
  raw_ostream &printBlockFreq(raw_ostream &OS, const BlockFrequency Freq) const;

  // Convenience method that attempts to look up the frequency associated with
  // BB and print it to OS.
  raw_ostream &printBlockFreq(raw_ostream &OS,
                              const MachineBasicBlock *MBB) const;

  uint64_t getEntryFreq() const;

};

}

#endif