class BlockFrequencyInfoImplBase
Declaration
class BlockFrequencyInfoImplBase { /* full declaration omitted */ };
Description
Base class for BlockFrequencyInfoImpl BlockFrequencyInfoImplBase has supporting data structures and some algorithms for BlockFrequencyInfoImplBase. Only algorithms that depend on the block type (or that call such algorithms) are skipped here. Nevertheless, the majority of the overall algorithm documention lives with BlockFrequencyInfoImpl. See there for details.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:170
Member Variables
- public std::vector<FrequencyData> Freqs
- Data about each block. This is used downstream.
- public SparseBitVector<> IsIrrLoopHeader
- Whether each block is an irreducible loop header. This is used downstream.
- public std::vector<WorkingData> Working
- Loop data: see initializeLoops().
- public std::list<LoopData> Loops
- Indexed information about loops.
Method Overview
- public bool addLoopSuccessorsToDist(const llvm::BlockFrequencyInfoImplBase::LoopData * OuterLoop, llvm::BlockFrequencyInfoImplBase::LoopData & Loop, llvm::BlockFrequencyInfoImplBase::Distribution & Dist)
- public bool addToDist(llvm::BlockFrequencyInfoImplBase::Distribution & Dist, const llvm::BlockFrequencyInfoImplBase::LoopData * OuterLoop, const llvm::BlockFrequencyInfoImplBase::BlockNode & Pred, const llvm::BlockFrequencyInfoImplBase::BlockNode & Succ, uint64_t Weight)
- public void adjustLoopHeaderMass(llvm::BlockFrequencyInfoImplBase::LoopData & Loop)
- public iterator_range<std::list<LoopData>::iterator> analyzeIrreducible(const bfi_detail::IrreducibleGraph & G, llvm::BlockFrequencyInfoImplBase::LoopData * OuterLoop, std::list<LoopData>::iterator Insert)
- public void clear()
- public void computeLoopScale(llvm::BlockFrequencyInfoImplBase::LoopData & Loop)
- public void distributeIrrLoopHeaderMass(llvm::BlockFrequencyInfoImplBase::Distribution & Dist)
- public void distributeMass(const llvm::BlockFrequencyInfoImplBase::BlockNode & Source, llvm::BlockFrequencyInfoImplBase::LoopData * OuterLoop, llvm::BlockFrequencyInfoImplBase::Distribution & Dist)
- public void dump() const
- public void finalizeMetrics()
- public llvm::BlockFrequency getBlockFreq(const llvm::BlockFrequencyInfoImplBase::BlockNode & Node) const
- public virtual std::string getBlockName(const llvm::BlockFrequencyInfoImplBase::BlockNode & Node) const
- public Optional<uint64_t> getBlockProfileCount(const llvm::Function & F, const llvm::BlockFrequencyInfoImplBase::BlockNode & Node, bool AllowSynthetic = false) const
- public uint64_t getEntryFreq() const
- public llvm::BlockFrequencyInfoImplBase::Scaled64 getFloatingBlockFreq(const llvm::BlockFrequencyInfoImplBase::BlockNode & Node) const
- public std::string getLoopName(const llvm::BlockFrequencyInfoImplBase::LoopData & Loop) const
- public llvm::BlockFrequencyInfoImplBase::LoopData & getLoopPackage(const llvm::BlockFrequencyInfoImplBase::BlockNode & Head)
- public Optional<uint64_t> getProfileCountFromFreq(const llvm::Function & F, uint64_t Freq, bool AllowSynthetic = false) const
- public bool isIrrLoopHeader(const llvm::BlockFrequencyInfoImplBase::BlockNode & Node)
- public void packageLoop(llvm::BlockFrequencyInfoImplBase::LoopData & Loop)
- public virtual llvm::raw_ostream & print(llvm::raw_ostream & OS) const
- public llvm::raw_ostream & printBlockFreq(llvm::raw_ostream & OS, const llvm::BlockFrequencyInfoImplBase::BlockNode & Node) const
- public llvm::raw_ostream & printBlockFreq(llvm::raw_ostream & OS, const llvm::BlockFrequency & Freq) const
- public void setBlockFreq(const llvm::BlockFrequencyInfoImplBase::BlockNode & Node, uint64_t Freq)
- public void unwrapLoops()
- public void updateLoopWithIrreducible(llvm::BlockFrequencyInfoImplBase::LoopData & OuterLoop)
- public virtual ~BlockFrequencyInfoImplBase()
Methods
¶bool addLoopSuccessorsToDist(
const llvm::BlockFrequencyInfoImplBase::
LoopData* OuterLoop,
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop,
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
bool addLoopSuccessorsToDist(
const llvm::BlockFrequencyInfoImplBase::
LoopData* OuterLoop,
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop,
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
Description
Add all edges out of a packaged loop to the distribution. Adds all edges from LocalLoopHead to Dist. Calls addToDist() to add each successor edge.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:436
Parameters
- const llvm::BlockFrequencyInfoImplBase::LoopData* OuterLoop
- llvm::BlockFrequencyInfoImplBase::LoopData& Loop
- llvm::BlockFrequencyInfoImplBase::Distribution& Dist
Returns
\c true unless there's an irreducible backedge.
¶bool addToDist(
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist,
const llvm::BlockFrequencyInfoImplBase::
LoopData* OuterLoop,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Pred,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Succ,
uint64_t Weight)
bool addToDist(
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist,
const llvm::BlockFrequencyInfoImplBase::
LoopData* OuterLoop,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Pred,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Succ,
uint64_t Weight)
Description
Add an edge to the distribution. Adds an edge to Succ to Dist. If \c LoopHead.isValid(), then whether the edge is local/exit/backedge is in the context of LoopHead. Otherwise, every edge should be a local edge (since all the loops are packaged up).
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:446
Parameters
- llvm::BlockFrequencyInfoImplBase::Distribution& Dist
- const llvm::BlockFrequencyInfoImplBase::LoopData* OuterLoop
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Pred
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Succ
- uint64_t Weight
Returns
\c true unless aborted due to an irreducible backedge.
¶void adjustLoopHeaderMass(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
void adjustLoopHeaderMass(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
Description
Adjust the mass of all headers in an irreducible loop. Initially, irreducible loops are assumed to distribute their mass equally among its headers. This can lead to wrong frequency estimates since some headers may be executed more frequently than others. This adjusts header mass distribution so it matches the weights of the backedges going into each of the loop headers.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:494
Parameters
¶iterator_range<std::list<LoopData>::iterator>
analyzeIrreducible(
const bfi_detail::IrreducibleGraph& G,
llvm::BlockFrequencyInfoImplBase::LoopData*
OuterLoop,
std::list<LoopData>::iterator Insert)
iterator_range<std::list<LoopData>::iterator>
analyzeIrreducible(
const bfi_detail::IrreducibleGraph& G,
llvm::BlockFrequencyInfoImplBase::LoopData*
OuterLoop,
std::list<LoopData>::iterator Insert)
Description
Analyze irreducible SCCs. Separate irreducible SCCs from \c G, which is an explict graph of \c OuterLoop (or the top-level function, if \c OuterLoop is \c nullptr). Insert them into \a Loops before \c Insert.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:463
Parameters
- const bfi_detail::IrreducibleGraph& G
- llvm::BlockFrequencyInfoImplBase::LoopData* OuterLoop
- std::list<LoopData>::iterator Insert
Returns
the \c LoopData nodes representing the irreducible SCCs.
¶void clear()
void clear()
Description
Clear all memory.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:511
¶void computeLoopScale(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
void computeLoopScale(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
Description
Compute the loop scale for a loop.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:484
Parameters
¶void distributeIrrLoopHeaderMass(
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
void distributeIrrLoopHeaderMass(
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:496
Parameters
¶void distributeMass(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Source,
llvm::BlockFrequencyInfoImplBase::LoopData*
OuterLoop,
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
void distributeMass(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Source,
llvm::BlockFrequencyInfoImplBase::LoopData*
OuterLoop,
llvm::BlockFrequencyInfoImplBase::
Distribution& Dist)
Description
Distribute mass according to a distribution. Distributes the mass in Source according to Dist. If LoopHead.isValid(), backedges and exits are stored in its entry in Loops. Mass is distributed in parallel from two copies of the source mass.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:480
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Source
- llvm::BlockFrequencyInfoImplBase::LoopData* OuterLoop
- llvm::BlockFrequencyInfoImplBase::Distribution& Dist
¶void dump() const
void dump() const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:517
¶void finalizeMetrics()
void finalizeMetrics()
Description
Finalize frequency metrics. Calculates final frequencies and cleans up no-longer-needed data structures.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:508
¶llvm::BlockFrequency getBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
llvm::BlockFrequency getBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:521
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
¶virtual std::string getBlockName(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
virtual std::string getBlockName(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:513
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
¶Optional<uint64_t> getBlockProfileCount(
const llvm::Function& F,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node,
bool AllowSynthetic = false) const
Optional<uint64_t> getBlockProfileCount(
const llvm::Function& F,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node,
bool AllowSynthetic = false) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:522
Parameters
- const llvm::Function& F
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
- bool AllowSynthetic = false
¶uint64_t getEntryFreq() const
uint64_t getEntryFreq() const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:536
¶llvm::BlockFrequencyInfoImplBase::Scaled64
getFloatingBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
llvm::BlockFrequencyInfoImplBase::Scaled64
getFloatingBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:519
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
¶std::string getLoopName(
const llvm::BlockFrequencyInfoImplBase::
LoopData& Loop) const
std::string getLoopName(
const llvm::BlockFrequencyInfoImplBase::
LoopData& Loop) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:514
Parameters
- const llvm::BlockFrequencyInfoImplBase::LoopData& Loop
¶llvm::BlockFrequencyInfoImplBase::LoopData&
getLoopPackage(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Head)
llvm::BlockFrequencyInfoImplBase::LoopData&
getLoopPackage(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Head)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:449
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Head
¶Optional<uint64_t> getProfileCountFromFreq(
const llvm::Function& F,
uint64_t Freq,
bool AllowSynthetic = false) const
Optional<uint64_t> getProfileCountFromFreq(
const llvm::Function& F,
uint64_t Freq,
bool AllowSynthetic = false) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:525
Parameters
- const llvm::Function& F
- uint64_t Freq
- bool AllowSynthetic = false
¶bool isIrrLoopHeader(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node)
bool isIrrLoopHeader(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:528
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
¶void packageLoop(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
void packageLoop(
llvm::BlockFrequencyInfoImplBase::LoopData&
Loop)
Description
Package up a loop.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:499
Parameters
¶virtual llvm::raw_ostream& print(
llvm::raw_ostream& OS) const
virtual llvm::raw_ostream& print(
llvm::raw_ostream& OS) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:516
Parameters
¶llvm::raw_ostream& printBlockFreq(
llvm::raw_ostream& OS,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
llvm::raw_ostream& printBlockFreq(
llvm::raw_ostream& OS,
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:532
Parameters
- llvm::raw_ostream& OS
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
¶llvm::raw_ostream& printBlockFreq(
llvm::raw_ostream& OS,
const llvm::BlockFrequency& Freq) const
llvm::raw_ostream& printBlockFreq(
llvm::raw_ostream& OS,
const llvm::BlockFrequency& Freq) const
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:533
Parameters
- llvm::raw_ostream& OS
- const llvm::BlockFrequency& Freq
¶void setBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node,
uint64_t Freq)
void setBlockFreq(
const llvm::BlockFrequencyInfoImplBase::
BlockNode& Node,
uint64_t Freq)
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:530
Parameters
- const llvm::BlockFrequencyInfoImplBase::BlockNode& Node
- uint64_t Freq
¶void unwrapLoops()
void unwrapLoops()
Description
Unwrap loops.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:502
¶void updateLoopWithIrreducible(
llvm::BlockFrequencyInfoImplBase::LoopData&
OuterLoop)
void updateLoopWithIrreducible(
llvm::BlockFrequencyInfoImplBase::LoopData&
OuterLoop)
Description
Update a loop after packaging irreducible SCCs inside of it. Update \c OuterLoop. Before finding irreducible control flow, it was partway through \a computeMassInLoop(), so \a LoopData::Exits and \a LoopData::BackedgeMass need to be reset. Also, nodes that were packaged up need to be removed from \a OuterLoop::Nodes.
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:472
Parameters
- llvm::BlockFrequencyInfoImplBase::LoopData& OuterLoop
¶virtual ~BlockFrequencyInfoImplBase()
virtual ~BlockFrequencyInfoImplBase()
Description
Virtual destructor. Need a virtual destructor to mask the compiler warning about getBlockName().
Declared at: llvm/include/llvm/Analysis/BlockFrequencyInfoImpl.h:428