|
LLVM
4.0.0
|
Base class for BlockFrequencyInfoImpl. More...
#include <BlockFrequencyInfoImpl.h>
Classes | |
| struct | BlockNode |
| Representative of a block. More... | |
| struct | Distribution |
| Distribution of unscaled probability weight. More... | |
| struct | FrequencyData |
| Stats about a block itself. More... | |
| struct | LoopData |
| Data about a loop. More... | |
| struct | Weight |
| Unscaled probability weight. More... | |
| struct | WorkingData |
| Index of loop information. More... | |
Public Types | |
| typedef ScaledNumber< uint64_t > | Scaled64 |
| typedef bfi_detail::BlockMass | BlockMass |
Public Attributes | |
| std::vector< FrequencyData > | Freqs |
| Data about each block. This is used downstream. More... | |
| std::vector< WorkingData > | Working |
| Loop data: see initializeLoops(). More... | |
| std::list< LoopData > | Loops |
| Indexed information about loops. More... | |
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.
Definition at line 160 of file BlockFrequencyInfoImpl.h.
Definition at line 163 of file BlockFrequencyInfoImpl.h.
| typedef ScaledNumber<uint64_t> llvm::BlockFrequencyInfoImplBase::Scaled64 |
Definition at line 162 of file BlockFrequencyInfoImpl.h.
|
inlinevirtual |
Virtual destructor.
Need a virtual destructor to mask the compiler warning about getBlockName().
Definition at line 502 of file BlockFrequencyInfoImpl.h.
| bool BlockFrequencyInfoImplBase::addLoopSuccessorsToDist | ( | const LoopData * | OuterLoop, |
| LoopData & | Loop, | ||
| Distribution & | Dist | ||
| ) |
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.
true unless there's an irreducible backedge. Definition at line 328 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::LoopData::Exits, llvm::BlockFrequencyInfoImplBase::LoopData::getHeader(), and I.
| bool BlockFrequencyInfoImplBase::addToDist | ( | Distribution & | Dist, |
| const LoopData * | OuterLoop, | ||
| const BlockNode & | Pred, | ||
| const BlockNode & | Succ, | ||
| uint64_t | Weight | ||
| ) |
Add an edge to the distribution.
Adds an edge to Succ to Dist. If 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).
true unless aborted due to an irreducible backedge. Definition at line 266 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::Distribution::addBackedge(), llvm::BlockFrequencyInfoImplBase::Distribution::addExit(), llvm::BlockFrequencyInfoImplBase::Distribution::addLocal(), assert(), llvm::dbgs(), DEBUG, llvm::bfi_detail::getBlockName(), llvm::BlockFrequencyInfoImplBase::BlockNode::Index, llvm::BlockFrequencyInfoImplBase::LoopData::isHeader(), and llvm::BlockFrequencyInfoImplBase::LoopData::isIrreducible().
| void BlockFrequencyInfoImplBase::adjustLoopHeaderMass | ( | LoopData & | Loop | ) |
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.
Definition at line 765 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::Distribution::addLocal(), llvm::BlockFrequencyInfoImplBase::Weight::Amount, assert(), llvm::BlockFrequencyInfoImplBase::LoopData::BackedgeMass, D, llvm::dbgs(), DEBUG, debugAssign(), llvm::bfi_detail::getBlockName(), llvm::bfi_detail::BlockMass::getFull(), llvm::BlockFrequencyInfoImplBase::LoopData::getHeaderIndex(), H, llvm::BlockFrequencyInfoImplBase::BlockNode::Index, llvm::BlockFrequencyInfoImplBase::LoopData::isIrreducible(), AMDGPU::RuntimeMD::KernelArg::Local, llvm::BlockFrequencyInfoImplBase::LoopData::Nodes, llvm::BlockFrequencyInfoImplBase::LoopData::NumHeaders, llvm::BlockFrequencyInfoImplBase::Weight::TargetNode, llvm::BlockFrequencyInfoImplBase::Weight::Type, and llvm::BlockFrequencyInfoImplBase::Distribution::Weights.
| iterator_range< std::list< LoopData >::iterator > BlockFrequencyInfoImplBase::analyzeIrreducible | ( | const bfi_detail::IrreducibleGraph & | G, |
| LoopData * | OuterLoop, | ||
| std::list< LoopData >::iterator | Insert | ||
| ) |
Analyze irreducible SCCs.
Separate irreducible SCCs from G, which is an explict graph of OuterLoop (or the top-level function, if OuterLoop is nullptr). Insert them into Loops before Insert.
LoopData nodes representing the irreducible SCCs. Definition at line 734 of file BlockFrequencyInfoImpl.cpp.
References assert(), createIrreducibleLoop(), I, Loops, llvm::make_range(), and llvm::scc_begin().
| void BlockFrequencyInfoImplBase::clear | ( | ) |
Clear all memory.
Definition at line 249 of file BlockFrequencyInfoImpl.cpp.
References Loops, and std::swap().
Referenced by llvm::BlockFrequencyInfoImpl< BlockT >::calculate(), and cleanup().
| void BlockFrequencyInfoImplBase::computeLoopScale | ( | LoopData & | Loop | ) |
Compute the loop scale for a loop.
Definition at line 341 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::LoopData::BackedgeMass, llvm::dbgs(), DEBUG, llvm::bfi_detail::BlockMass::getFull(), llvm::ScaledNumber< DigitsT >::inverse(), llvm::bfi_detail::BlockMass::isEmpty(), llvm::BlockFrequencyInfoImplBase::LoopData::Scale, and llvm::bfi_detail::BlockMass::toScaled().
| void BlockFrequencyInfoImplBase::distributeMass | ( | const BlockNode & | Source, |
| LoopData * | OuterLoop, | ||
| Distribution & | Dist | ||
| ) |
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.
Definition at line 400 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::Weight::Amount, assert(), llvm::BlockFrequencyInfoImplBase::LoopData::BackedgeMass, D, llvm::dbgs(), DEBUG, debugAssign(), llvm::BlockFrequencyInfoImplBase::LoopData::Exits, llvm::BlockFrequencyInfoImplBase::LoopData::getHeaderIndex(), llvm::bfi_detail::BlockMass::getMass(), llvm::BlockFrequencyInfoImplBase::BlockNode::Index, AMDGPU::RuntimeMD::KernelArg::Local, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::BlockFrequencyInfoImplBase::Weight::TargetNode, llvm::BlockFrequencyInfoImplBase::Weight::Type, and llvm::BlockFrequencyInfoImplBase::Distribution::Weights.
|
inline |
Definition at line 478 of file BlockFrequencyInfoImpl.h.
References llvm::dbgs(), and print().
| void BlockFrequencyInfoImplBase::finalizeMetrics | ( | ) |
Finalize frequency metrics.
Calculates final frequencies and cleans up no-longer-needed data structures.
Definition at line 505 of file BlockFrequencyInfoImpl.cpp.
References cleanup(), convertFloatingToInteger(), DEBUG, llvm::dump(), and fuzzer::min().
| BlockFrequency BlockFrequencyInfoImplBase::getBlockFreq | ( | const BlockNode & | Node | ) | const |
Definition at line 527 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::BlockNode::Index, and llvm::BlockFrequencyInfoImplBase::BlockNode::isValid().
Referenced by llvm::BlockFrequencyInfoImpl< llvm::BitTracker >::getBlockFreq().
Definition at line 569 of file BlockFrequencyInfoImpl.cpp.
Referenced by convertFloatingToInteger(), debugAssign(), findIrreducibleHeaders(), and unwrapLoop().
| Optional< uint64_t > BlockFrequencyInfoImplBase::getBlockProfileCount | ( | const Function & | F, |
| const BlockNode & | Node | ||
| ) | const |
Definition at line 534 of file BlockFrequencyInfoImpl.cpp.
Referenced by llvm::BlockFrequencyInfoImpl< llvm::BitTracker >::getBlockProfileCount().
|
inline |
Definition at line 494 of file BlockFrequencyInfoImpl.h.
Definition at line 555 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::BlockNode::Index, and llvm::BlockFrequencyInfoImplBase::BlockNode::isValid().
Referenced by llvm::BlockFrequencyInfoImpl< llvm::BitTracker >::getFloatingBlockFreq().
Definition at line 574 of file BlockFrequencyInfoImpl.cpp.
References llvm::bfi_detail::getBlockName(), llvm::BlockFrequencyInfoImplBase::LoopData::getHeader(), and llvm::BlockFrequencyInfoImplBase::LoopData::isIrreducible().
Referenced by unwrapLoop().
Definition at line 412 of file BlockFrequencyInfoImpl.h.
References assert(), llvm::BlockFrequencyInfoImplBase::BlockNode::Index, and Working.
| Optional< uint64_t > BlockFrequencyInfoImplBase::getProfileCountFromFreq | ( | const Function & | F, |
| uint64_t | Freq | ||
| ) | const |
Definition at line 540 of file BlockFrequencyInfoImpl.cpp.
References llvm::Function::getEntryCount(), and llvm::None.
Referenced by llvm::BlockFrequencyInfoImpl< llvm::BitTracker >::getProfileCountFromFreq().
| void BlockFrequencyInfoImplBase::packageLoop | ( | LoopData & | Loop | ) |
Package up a loop.
Definition at line 375 of file BlockFrequencyInfoImpl.cpp.
References llvm::SmallVectorImpl< T >::clear(), llvm::dbgs(), DEBUG, llvm::BlockFrequencyInfoImplBase::LoopData::Exits, llvm::bfi_detail::getBlockName(), llvm::BlockFrequencyInfoImplBase::BlockNode::Index, llvm::BlockFrequencyInfoImplBase::LoopData::IsPackaged, and llvm::BlockFrequencyInfoImplBase::LoopData::Nodes.
|
inlinevirtual |
Reimplemented in llvm::BlockFrequencyInfoImpl< BlockT >, and llvm::BlockFrequencyInfoImpl< llvm::BitTracker >.
Definition at line 477 of file BlockFrequencyInfoImpl.h.
Referenced by dump().
| raw_ostream & BlockFrequencyInfoImplBase::printBlockFreq | ( | raw_ostream & | OS, |
| const BlockNode & | Node | ||
| ) | const |
Definition at line 579 of file BlockFrequencyInfoImpl.cpp.
Referenced by llvm::BlockFrequencyInfoImpl< llvm::BitTracker >::printBlockFreq().
| raw_ostream & BlockFrequencyInfoImplBase::printBlockFreq | ( | raw_ostream & | OS, |
| const BlockFrequency & | Freq | ||
| ) | const |
Definition at line 585 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequency::getFrequency().
Definition at line 561 of file BlockFrequencyInfoImpl.cpp.
References assert(), llvm::BlockFrequencyInfoImplBase::BlockNode::Index, and llvm::BlockFrequencyInfoImplBase::BlockNode::isValid().
Referenced by llvm::BlockFrequencyInfoImpl< BlockT >::setBlockFreq().
| void BlockFrequencyInfoImplBase::unwrapLoops | ( | ) |
Unwrap loops.
Definition at line 496 of file BlockFrequencyInfoImpl.cpp.
References Loops, llvm::bfi_detail::BlockMass::toScaled(), and unwrapLoop().
| void BlockFrequencyInfoImplBase::updateLoopWithIrreducible | ( | LoopData & | OuterLoop | ) |
Update a loop after packaging irreducible SCCs inside of it.
Update OuterLoop. Before finding irreducible control flow, it was partway through computeMassInLoop(), so LoopData::Exits and LoopData::BackedgeMass need to be reset. Also, nodes that were packaged up need to be removed from OuterLoop::Nodes.
Definition at line 754 of file BlockFrequencyInfoImpl.cpp.
References llvm::BlockFrequencyInfoImplBase::LoopData::BackedgeMass, llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorImpl< T >::clear(), E, llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::SmallVectorImpl< T >::erase(), llvm::BlockFrequencyInfoImplBase::LoopData::Exits, llvm::bfi_detail::BlockMass::getEmpty(), I, and llvm::BlockFrequencyInfoImplBase::LoopData::Nodes.
| std::vector<FrequencyData> llvm::BlockFrequencyInfoImplBase::Freqs |
Data about each block. This is used downstream.
Definition at line 385 of file BlockFrequencyInfoImpl.h.
Referenced by cleanup(), convertFloatingToInteger(), getEntryFreq(), and unwrapLoop().
| std::list<LoopData> llvm::BlockFrequencyInfoImplBase::Loops |
Indexed information about loops.
Definition at line 391 of file BlockFrequencyInfoImpl.h.
Referenced by createIrreducibleLoop().
| std::vector<WorkingData> llvm::BlockFrequencyInfoImplBase::Working |
Loop data: see initializeLoops().
Definition at line 388 of file BlockFrequencyInfoImpl.h.
Referenced by llvm::bfi_detail::IrreducibleGraph::addEdges(), llvm::bfi_detail::IrreducibleGraph::addNode(), llvm::bfi_detail::IrreducibleGraph::addNodesInFunction(), createIrreducibleLoop(), getLoopPackage(), llvm::bfi_detail::IrreducibleGraph::initialize(), and unwrapLoop().
1.8.6