LLVM 19.0.0git
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
llvm::SampleProfileLoaderBaseImpl< FT > Class Template Reference

#include "llvm/Transforms/Utils/SampleProfileLoaderBaseImpl.h"

Inheritance diagram for llvm::SampleProfileLoaderBaseImpl< FT >:
Inheritance graph
[legend]

Public Types

using NodeRef = typename GraphTraits< FT * >::NodeRef
 
using BT = std::remove_pointer_t< NodeRef >
 
using InstructionT = typename afdo_detail::IRTraits< BT >::InstructionT
 
using BasicBlockT = typename afdo_detail::IRTraits< BT >::BasicBlockT
 
using BlockFrequencyInfoT = typename afdo_detail::IRTraits< BT >::BlockFrequencyInfoT
 
using FunctionT = typename afdo_detail::IRTraits< BT >::FunctionT
 
using LoopT = typename afdo_detail::IRTraits< BT >::LoopT
 
using LoopInfoPtrT = typename afdo_detail::IRTraits< BT >::LoopInfoPtrT
 
using DominatorTreePtrT = typename afdo_detail::IRTraits< BT >::DominatorTreePtrT
 
using PostDominatorTreePtrT = typename afdo_detail::IRTraits< BT >::PostDominatorTreePtrT
 
using PostDominatorTreeT = typename afdo_detail::IRTraits< BT >::PostDominatorTreeT
 
using OptRemarkEmitterT = typename afdo_detail::IRTraits< BT >::OptRemarkEmitterT
 
using OptRemarkAnalysisT = typename afdo_detail::IRTraits< BT >::OptRemarkAnalysisT
 
using PredRangeT = typename afdo_detail::IRTraits< BT >::PredRangeT
 
using SuccRangeT = typename afdo_detail::IRTraits< BT >::SuccRangeT
 
using BlockWeightMap = DenseMap< const BasicBlockT *, uint64_t >
 
using EquivalenceClassMap = DenseMap< const BasicBlockT *, const BasicBlockT * >
 
using Edge = std::pair< const BasicBlockT *, const BasicBlockT * >
 
using EdgeWeightMap = DenseMap< Edge, uint64_t >
 
using BlockEdgeMap = DenseMap< const BasicBlockT *, SmallVector< const BasicBlockT *, 8 > >
 

Public Member Functions

 SampleProfileLoaderBaseImpl (std::string Name, std::string RemapName, IntrusiveRefCntPtr< vfs::FileSystem > FS)
 
void dump ()
 

Protected Member Functions

 ~SampleProfileLoaderBaseImpl ()=default
 
FunctiongetFunction (FunctionT &F)
 
const BasicBlockTgetEntryBB (const FunctionT *F)
 
PredRangeT getPredecessors (BasicBlockT *BB)
 
SuccRangeT getSuccessors (BasicBlockT *BB)
 
unsigned getFunctionLoc (FunctionT &Func)
 Get the line number for the function header.
 
virtual ErrorOr< uint64_tgetInstWeight (const InstructionT &Inst)
 Get the weight for an instruction.
 
ErrorOr< uint64_tgetInstWeightImpl (const InstructionT &Inst)
 
virtual ErrorOr< uint64_tgetProbeWeight (const InstructionT &Inst)
 
ErrorOr< uint64_tgetBlockWeight (const BasicBlockT *BB)
 Compute the weight of a basic block.
 
virtual const FunctionSamplesfindFunctionSamples (const InstructionT &I) const
 Get the FunctionSamples for an instruction.
 
void printEdgeWeight (raw_ostream &OS, Edge E)
 Print the weight of edge E on stream OS.
 
void printBlockWeight (raw_ostream &OS, const BasicBlockT *BB) const
 Print the weight of block BB on stream OS.
 
void printBlockEquivalence (raw_ostream &OS, const BasicBlockT *BB)
 Print the equivalence class of block BB on stream OS.
 
bool computeBlockWeights (FunctionT &F)
 Compute and store the weights of every basic block.
 
void findEquivalenceClasses (FunctionT &F)
 Find equivalence classes.
 
void findEquivalencesFor (BasicBlockT *BB1, ArrayRef< BasicBlockT * > Descendants, PostDominatorTreeT *DomTree)
 Find equivalence classes for the given block.
 
void propagateWeights (FunctionT &F)
 Propagate weights into edges.
 
void applyProfi (FunctionT &F, BlockEdgeMap &Successors, BlockWeightMap &SampleBlockWeights, BlockWeightMap &BlockWeights, EdgeWeightMap &EdgeWeights)
 
uint64_t visitEdge (Edge E, unsigned *NumUnknownEdges, Edge *UnknownEdge)
 Visit the given edge to decide if it has a valid weight.
 
void buildEdges (FunctionT &F)
 Build in/out edge lists for each basic block in the CFG.
 
bool propagateThroughEdges (FunctionT &F, bool UpdateBlockCount)
 Propagate weights through incoming/outgoing edges.
 
void clearFunctionData (bool ResetDT=true)
 Clear all the per-function data used to load samples and propagate weights.
 
void computeDominanceAndLoopInfo (FunctionT &F)
 
bool computeAndPropagateWeights (FunctionT &F, const DenseSet< GlobalValue::GUID > &InlinedGUIDs)
 Generate branch weight metadata for all branches in F.
 
void initWeightPropagation (FunctionT &F, const DenseSet< GlobalValue::GUID > &InlinedGUIDs)
 
void finalizeWeightPropagation (FunctionT &F, const DenseSet< GlobalValue::GUID > &InlinedGUIDs)
 
void emitCoverageRemarks (FunctionT &F)
 
void computeDominanceAndLoopInfo (MachineFunction &F)
 
void computeDominanceAndLoopInfo (Function &F)
 

Protected Attributes

DenseMap< const DILocation *, const FunctionSamples * > DILocation2SampleMap
 
BlockWeightMap BlockWeights
 Map basic blocks to their computed weights.
 
EdgeWeightMap EdgeWeights
 Map edges to their computed weights.
 
SmallPtrSet< const BasicBlockT *, 32 > VisitedBlocks
 Set of visited blocks during propagation.
 
SmallSet< Edge, 32 > VisitedEdges
 Set of visited edges during propagation.
 
EquivalenceClassMap EquivalenceClass
 Equivalence classes for block weights.
 
DominatorTreePtrT DT
 Dominance, post-dominance and loop information.
 
PostDominatorTreePtrT PDT
 
LoopInfoPtrT LI
 
BlockEdgeMap Predecessors
 Predecessors for each basic block in the CFG.
 
BlockEdgeMap Successors
 Successors for each basic block in the CFG.
 
SampleCoverageTracker CoverageTracker
 Profile coverage tracker.
 
std::unique_ptr< SampleProfileReaderReader
 Profile reader object.
 
std::map< SampleContext, FunctionSamplesOutlineFunctionSamples
 Synthetic samples created by duplicating the samples of inlined functions from the original profile as if they were top level sample profiles.
 
std::unique_ptr< PseudoProbeManagerProbeManager
 
FunctionSamplesSamples = nullptr
 Samples collected for the body of this function.
 
std::string Filename
 Name of the profile file to load.
 
std::string RemappingFilename
 Name of the profile remapping file to load.
 
IntrusiveRefCntPtr< vfs::FileSystemFS
 VirtualFileSystem to load profile files from.
 
ProfileSummaryInfoPSI = nullptr
 Profile Summary Info computed from sample profile.
 
OptRemarkEmitterTORE = nullptr
 Optimization Remark Emitter used to emit diagnostic remarks.
 

Friends

class SampleCoverageTracker
 

Detailed Description

template<typename FT>
class llvm::SampleProfileLoaderBaseImpl< FT >

Definition at line 158 of file SampleProfileLoaderBaseImpl.h.

Member Typedef Documentation

◆ BasicBlockT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::BasicBlockT = typename afdo_detail::IRTraits<BT>::BasicBlockT

Definition at line 168 of file SampleProfileLoaderBaseImpl.h.

◆ BlockEdgeMap

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::BlockEdgeMap = DenseMap<const BasicBlockT *, SmallVector<const BasicBlockT *, 8> >

Definition at line 192 of file SampleProfileLoaderBaseImpl.h.

◆ BlockFrequencyInfoT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::BlockFrequencyInfoT = typename afdo_detail::IRTraits<BT>::BlockFrequencyInfoT

Definition at line 169 of file SampleProfileLoaderBaseImpl.h.

◆ BlockWeightMap

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::BlockWeightMap = DenseMap<const BasicBlockT *, uint64_t>

Definition at line 187 of file SampleProfileLoaderBaseImpl.h.

◆ BT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::BT = std::remove_pointer_t<NodeRef>

Definition at line 166 of file SampleProfileLoaderBaseImpl.h.

◆ DominatorTreePtrT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::DominatorTreePtrT = typename afdo_detail::IRTraits<BT>::DominatorTreePtrT

Definition at line 174 of file SampleProfileLoaderBaseImpl.h.

◆ Edge

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::Edge = std::pair<const BasicBlockT *, const BasicBlockT *>

Definition at line 190 of file SampleProfileLoaderBaseImpl.h.

◆ EdgeWeightMap

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::EdgeWeightMap = DenseMap<Edge, uint64_t>

Definition at line 191 of file SampleProfileLoaderBaseImpl.h.

◆ EquivalenceClassMap

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::EquivalenceClassMap = DenseMap<const BasicBlockT *, const BasicBlockT *>

Definition at line 188 of file SampleProfileLoaderBaseImpl.h.

◆ FunctionT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::FunctionT = typename afdo_detail::IRTraits<BT>::FunctionT

Definition at line 171 of file SampleProfileLoaderBaseImpl.h.

◆ InstructionT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::InstructionT = typename afdo_detail::IRTraits<BT>::InstructionT

Definition at line 167 of file SampleProfileLoaderBaseImpl.h.

◆ LoopInfoPtrT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::LoopInfoPtrT = typename afdo_detail::IRTraits<BT>::LoopInfoPtrT

Definition at line 173 of file SampleProfileLoaderBaseImpl.h.

◆ LoopT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::LoopT = typename afdo_detail::IRTraits<BT>::LoopT

Definition at line 172 of file SampleProfileLoaderBaseImpl.h.

◆ NodeRef

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::NodeRef = typename GraphTraits<FT *>::NodeRef

Definition at line 165 of file SampleProfileLoaderBaseImpl.h.

◆ OptRemarkAnalysisT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::OptRemarkAnalysisT = typename afdo_detail::IRTraits<BT>::OptRemarkAnalysisT

Definition at line 182 of file SampleProfileLoaderBaseImpl.h.

◆ OptRemarkEmitterT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::OptRemarkEmitterT = typename afdo_detail::IRTraits<BT>::OptRemarkEmitterT

Definition at line 180 of file SampleProfileLoaderBaseImpl.h.

◆ PostDominatorTreePtrT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::PostDominatorTreePtrT = typename afdo_detail::IRTraits<BT>::PostDominatorTreePtrT

Definition at line 176 of file SampleProfileLoaderBaseImpl.h.

◆ PostDominatorTreeT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::PostDominatorTreeT = typename afdo_detail::IRTraits<BT>::PostDominatorTreeT

Definition at line 178 of file SampleProfileLoaderBaseImpl.h.

◆ PredRangeT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::PredRangeT = typename afdo_detail::IRTraits<BT>::PredRangeT

Definition at line 184 of file SampleProfileLoaderBaseImpl.h.

◆ SuccRangeT

template<typename FT >
using llvm::SampleProfileLoaderBaseImpl< FT >::SuccRangeT = typename afdo_detail::IRTraits<BT>::SuccRangeT

Definition at line 185 of file SampleProfileLoaderBaseImpl.h.

Constructor & Destructor Documentation

◆ SampleProfileLoaderBaseImpl()

template<typename FT >
llvm::SampleProfileLoaderBaseImpl< FT >::SampleProfileLoaderBaseImpl ( std::string  Name,
std::string  RemapName,
IntrusiveRefCntPtr< vfs::FileSystem FS 
)
inline

Definition at line 160 of file SampleProfileLoaderBaseImpl.h.

◆ ~SampleProfileLoaderBaseImpl()

template<typename FT >
llvm::SampleProfileLoaderBaseImpl< FT >::~SampleProfileLoaderBaseImpl ( )
protecteddefault

Member Function Documentation

◆ applyProfi()

template<typename FT >
void llvm::SampleProfileLoaderBaseImpl< FT >::applyProfi ( FunctionT F,
BlockEdgeMap Successors,
BlockWeightMap SampleBlockWeights,
BlockWeightMap BlockWeights,
EdgeWeightMap EdgeWeights 
)
protected

Definition at line 963 of file SampleProfileLoaderBaseImpl.h.

References F.

◆ buildEdges()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::buildEdges ( FunctionT F)
protected

Build in/out edge lists for each basic block in the CFG.

We are interested in unique edges. If a block B1 has multiple edges to another block B2, we only add a single B1->B2 edge.

Definition at line 868 of file SampleProfileLoaderBaseImpl.h.

References llvm::SmallPtrSetImplBase::clear(), F, llvm::SmallPtrSetImpl< PtrType >::insert(), and llvm_unreachable.

◆ clearFunctionData()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::clearFunctionData ( bool  ResetDT = true)
protected

Clear all the per-function data used to load samples and propagate weights.

Definition at line 320 of file SampleProfileLoaderBaseImpl.h.

◆ computeAndPropagateWeights()

template<typename BT >
bool llvm::SampleProfileLoaderBaseImpl< BT >::computeAndPropagateWeights ( FunctionT F,
const DenseSet< GlobalValue::GUID > &  InlinedGUIDs 
)
protected

Generate branch weight metadata for all branches in F.

Branch weights are computed out of instruction samples using a propagation heuristic. Propagation proceeds in 3 phases:

1- Assignment of block weights. All the basic blocks in the function are initial assigned the same weight as their most frequently executed instruction.

2- Creation of equivalence classes. Since samples may be missing from blocks, we can fill in the gaps by setting the weights of all the blocks in the same equivalence class to the same weight. To compute the concept of equivalence, we use dominance and loop information. Two blocks B1 and B2 are in the same equivalence class if B1 dominates B2, B2 post-dominates B1 and both are in the same loop.

3- Propagation of block weights into edges. This uses a simple propagation heuristic. The following rules are applied to every block BB in the CFG:

  • If BB has a single predecessor/successor, then the weight of that edge is the weight of the block.
  • If all the edges are known except one, and the weight of the block is already known, the weight of the unknown edge will be the weight of the block minus the sum of all the known edges. If the sum of all the known edges is larger than BB's weight, we set the unknown edge weight to zero.
  • If there is a self-referential edge, and the weight of the block is known, the weight for that edge is set to the weight of the block minus the weight of the other incoming edges to that block (if known).

Since this propagation is not guaranteed to finalize for every CFG, we only allow it to proceed for a limited number of iterations (controlled by -sample-profile-max-propagate-iterations).

FIXME: Try to replace this propagation heuristic with a scheme that is guaranteed to finalize. A work-list approach similar to the standard value propagation algorithm used by SSA-CCP might work here.

Parameters
FThe function to query.
Returns
true if F was modified. Returns false, otherwise.

Definition at line 1017 of file SampleProfileLoaderBaseImpl.h.

References F, and llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::size().

◆ computeBlockWeights()

template<typename BT >
bool llvm::SampleProfileLoaderBaseImpl< BT >::computeBlockWeights ( FunctionT F)
protected

Compute and store the weights of every basic block.

This populates the BlockWeights map by computing the weights of every basic block in the CFG.

Parameters
FThe function to query.

Definition at line 524 of file SampleProfileLoaderBaseImpl.h.

References llvm::dbgs(), F, llvm::ErrorOr< T >::get(), and LLVM_DEBUG.

◆ computeDominanceAndLoopInfo() [1/3]

void llvm::SampleProfileLoaderBaseImpl< Function >::computeDominanceAndLoopInfo ( Function F)
protected

Definition at line 626 of file SampleProfile.cpp.

References F.

◆ computeDominanceAndLoopInfo() [2/3]

template<typename FT >
void llvm::SampleProfileLoaderBaseImpl< FT >::computeDominanceAndLoopInfo ( FunctionT F)
protected

◆ computeDominanceAndLoopInfo() [3/3]

void llvm::SampleProfileLoaderBaseImpl< MachineFunction >::computeDominanceAndLoopInfo ( MachineFunction F)
protected

Definition at line 200 of file MIRSampleProfile.cpp.

◆ dump()

template<typename FT >
void llvm::SampleProfileLoaderBaseImpl< FT >::dump ( )
inline

◆ emitCoverageRemarks()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::emitCoverageRemarks ( FunctionT F)
protected

◆ finalizeWeightPropagation()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::finalizeWeightPropagation ( FunctionT F,
const DenseSet< GlobalValue::GUID > &  InlinedGUIDs 
)
protected

◆ findEquivalenceClasses()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::findEquivalenceClasses ( FunctionT F)
protected

Find equivalence classes.

Since samples may be missing from blocks, we can fill in the gaps by setting the weights of all the blocks in the same equivalence class to the same weight. To compute the concept of equivalence, we use dominance and loop information. Two blocks B1 and B2 are in the same equivalence class if B1 dominates B2, B2 post-dominates B1 and both are in the same loop.

Parameters
FThe function to query.

Definition at line 631 of file SampleProfileLoaderBaseImpl.h.

References llvm::SmallVectorImpl< T >::clear(), llvm::dbgs(), F, and LLVM_DEBUG.

◆ findEquivalencesFor()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::findEquivalencesFor ( BasicBlockT BB1,
ArrayRef< BasicBlockT * >  Descendants,
PostDominatorTreeT DomTree 
)
protected

Find equivalence classes for the given block.

This finds all the blocks that are guaranteed to execute the same number of times as BB1. To do this, it traverses all the descendants of BB1 in the dominator or post-dominator tree.

A block BB2 will be in the same equivalence class as BB1 if the following holds:

1- BB1 is a descendant of BB2 in the opposite tree. So, if BB2 is a descendant of BB1 in the dominator tree, then BB2 should dominate BB1 in the post-dominator tree.

2- Both BB2 and BB1 must be in the same loop.

For every block BB2 that meets those two requirements, we set BB2's equivalence class to BB1.

Parameters
BB1Block to check.
DescendantsDescendants of BB1 in either the dom or pdom tree.
DomTreeOpposite dominator tree. If Descendants is filled with blocks from BB1's dominator tree, then this is the post-dominator tree, and vice versa.

Definition at line 587 of file SampleProfileLoaderBaseImpl.h.

◆ findFunctionSamples()

template<typename BT >
const FunctionSamples * llvm::SampleProfileLoaderBaseImpl< BT >::findFunctionSamples ( const InstructionT Inst) const
protectedvirtual

Get the FunctionSamples for an instruction.

The FunctionSamples of an instruction Inst is the inlined instance in which that instruction is coming from. We traverse the inline stack of that instruction, and match it with the tree nodes in the profile.

Parameters
InstInstruction to query.
Returns
the FunctionSamples pointer to the inlined instance.

Definition at line 550 of file SampleProfileLoaderBaseImpl.h.

◆ getBlockWeight()

template<typename BT >
ErrorOr< uint64_t > llvm::SampleProfileLoaderBaseImpl< BT >::getBlockWeight ( const BasicBlockT BB)
protected

Compute the weight of a basic block.

The weight of basic block BB is the maximum weight of all the instructions in BB.

Parameters
BBThe basic block to query.
Returns
the weight for BB.

Definition at line 504 of file SampleProfileLoaderBaseImpl.h.

References I.

◆ getEntryBB()

template<typename FT >
const BasicBlockT * llvm::SampleProfileLoaderBaseImpl< FT >::getEntryBB ( const FunctionT F)
inlineprotected

Definition at line 202 of file SampleProfileLoaderBaseImpl.h.

References F.

◆ getFunction()

template<typename FT >
Function & llvm::SampleProfileLoaderBaseImpl< FT >::getFunction ( FunctionT F)
inlineprotected

Definition at line 199 of file SampleProfileLoaderBaseImpl.h.

References F.

◆ getFunctionLoc()

template<typename BT >
unsigned llvm::SampleProfileLoaderBaseImpl< BT >::getFunctionLoc ( FunctionT F)
protected

Get the line number for the function header.

This looks up function F in the current compilation unit and retrieves the line number where the function is defined. This is line 0 for all the samples read from the profile file. Every line number is relative to this line.

Parameters
FFunction object to query.
Returns
the line number where F is defined. If it returns 0, it means that there is no debug information available for F.

Definition at line 1129 of file SampleProfileLoaderBaseImpl.h.

References llvm::DS_Warning, F, getFunction(), and llvm::NoWarnSampleUnused.

◆ getInstWeight()

template<typename BT >
ErrorOr< uint64_t > llvm::SampleProfileLoaderBaseImpl< BT >::getInstWeight ( const InstructionT Inst)
protectedvirtual

Get the weight for an instruction.

The "weight" of an instruction Inst is the number of samples collected on that instruction at runtime. To retrieve it, we need to compute the line number of Inst relative to the start of its function. We use HeaderLineno to compute the offset. We then look up the samples collected for Inst using BodySamples.

Parameters
InstInstruction to query.
Returns
the weight of Inst.

Definition at line 385 of file SampleProfileLoaderBaseImpl.h.

References llvm::sampleprof::FunctionSamples::ProfileIsProbeBased.

◆ getInstWeightImpl()

template<typename BT >
ErrorOr< uint64_t > llvm::SampleProfileLoaderBaseImpl< BT >::getInstWeightImpl ( const InstructionT Inst)
protected

◆ getPredecessors()

template<typename FT >
PredRangeT llvm::SampleProfileLoaderBaseImpl< FT >::getPredecessors ( BasicBlockT BB)
inlineprotected

Definition at line 205 of file SampleProfileLoaderBaseImpl.h.

◆ getProbeWeight()

template<typename BT >
ErrorOr< uint64_t > llvm::SampleProfileLoaderBaseImpl< BT >::getProbeWeight ( const InstructionT Inst)
protectedvirtual

◆ getSuccessors()

template<typename FT >
SuccRangeT llvm::SampleProfileLoaderBaseImpl< FT >::getSuccessors ( BasicBlockT BB)
inlineprotected

Definition at line 208 of file SampleProfileLoaderBaseImpl.h.

◆ initWeightPropagation()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::initWeightPropagation ( FunctionT F,
const DenseSet< GlobalValue::GUID > &  InlinedGUIDs 
)
protected

◆ printBlockEquivalence()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::printBlockEquivalence ( raw_ostream OS,
const BasicBlockT BB 
)
protected

Print the equivalence class of block BB on stream OS.

Parameters
OSStream to emit the output to.
BBBlock to print.

Definition at line 352 of file SampleProfileLoaderBaseImpl.h.

References getName(), and OS.

◆ printBlockWeight()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::printBlockWeight ( raw_ostream OS,
const BasicBlockT BB 
) const
protected

Print the weight of block BB on stream OS.

Parameters
OSStream to emit the output to.
BBBlock to print.

Definition at line 364 of file SampleProfileLoaderBaseImpl.h.

References I, and OS.

◆ printEdgeWeight()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::printEdgeWeight ( raw_ostream OS,
Edge  E 
)
protected

Print the weight of edge E on stream OS.

Parameters
OSStream to emit the output to.
EEdge to print.

Definition at line 342 of file SampleProfileLoaderBaseImpl.h.

References E, and OS.

◆ propagateThroughEdges()

template<typename BT >
bool llvm::SampleProfileLoaderBaseImpl< BT >::propagateThroughEdges ( FunctionT F,
bool  UpdateBlockCount 
)
protected

Propagate weights through incoming/outgoing edges.

If the weight of a basic block is known, and there is only one edge with an unknown weight, we can calculate the weight of that edge.

Similarly, if all the edges have a known count, we can calculate the count of the basic block, if needed.

Parameters
FFunction to process.
UpdateBlockCountWhether we should update basic block counts that has already been annotated.
Returns
True if new weights were assigned to edges or blocks.

Definition at line 718 of file SampleProfileLoaderBaseImpl.h.

References llvm::dbgs(), E, F, and LLVM_DEBUG.

◆ propagateWeights()

template<typename BT >
void llvm::SampleProfileLoaderBaseImpl< BT >::propagateWeights ( FunctionT F)
protected

Propagate weights into edges.

The following rules are applied to every block BB in the CFG:

  • If BB has a single predecessor/successor, then the weight of that edge is the weight of the block.
  • If all incoming or outgoing edges are known except one, and the weight of the block is already known, the weight of the unknown edge will be the weight of the block minus the sum of all the known edges. If the sum of all the known edges is larger than BB's weight, we set the unknown edge weight to zero.
  • If there is a self-referential edge, and the weight of the block is known, the weight for that edge is set to the weight of the block minus the weight of the other incoming edges to that block (if known).

Definition at line 908 of file SampleProfileLoaderBaseImpl.h.

References F, llvm::ErrorOr< T >::get(), I, llvm::SampleProfileMaxPropagateIterations, and llvm::SampleProfileUseProfi.

◆ visitEdge()

template<typename BT >
uint64_t llvm::SampleProfileLoaderBaseImpl< BT >::visitEdge ( Edge  E,
unsigned NumUnknownEdges,
Edge UnknownEdge 
)
protected

Visit the given edge to decide if it has a valid weight.

If E has not been visited before, we copy to UnknownEdge and increment the count of unknown edges.

Parameters
EEdge to visit.
NumUnknownEdgesCurrent number of unknown edges.
UnknownEdgeSet if E has not been visited before.
Returns
E's weight, if known. Otherwise, return 0.

Definition at line 692 of file SampleProfileLoaderBaseImpl.h.

References E.

Friends And Related Function Documentation

◆ SampleCoverageTracker

template<typename FT >
friend class SampleCoverageTracker
friend

Definition at line 197 of file SampleProfileLoaderBaseImpl.h.

Member Data Documentation

◆ BlockWeights

template<typename FT >
BlockWeightMap llvm::SampleProfileLoaderBaseImpl< FT >::BlockWeights
protected

Map basic blocks to their computed weights.

The weight of a basic block is defined to be the maximum of all the instruction weights in that block.

Definition at line 252 of file SampleProfileLoaderBaseImpl.h.

◆ CoverageTracker

template<typename FT >
SampleCoverageTracker llvm::SampleProfileLoaderBaseImpl< FT >::CoverageTracker
protected

Profile coverage tracker.

Definition at line 286 of file SampleProfileLoaderBaseImpl.h.

◆ DILocation2SampleMap

template<typename FT >
DenseMap<const DILocation *, const FunctionSamples *> llvm::SampleProfileLoaderBaseImpl< FT >::DILocation2SampleMap
mutableprotected

Definition at line 218 of file SampleProfileLoaderBaseImpl.h.

◆ DT

template<typename FT >
DominatorTreePtrT llvm::SampleProfileLoaderBaseImpl< FT >::DT
protected

Dominance, post-dominance and loop information.

Definition at line 275 of file SampleProfileLoaderBaseImpl.h.

◆ EdgeWeights

template<typename FT >
EdgeWeightMap llvm::SampleProfileLoaderBaseImpl< FT >::EdgeWeights
protected

Map edges to their computed weights.

Edge weights are computed by propagating basic block weights in SampleProfile::propagateWeights.

Definition at line 258 of file SampleProfileLoaderBaseImpl.h.

◆ EquivalenceClass

template<typename FT >
EquivalenceClassMap llvm::SampleProfileLoaderBaseImpl< FT >::EquivalenceClass
protected

Equivalence classes for block weights.

Two blocks BB1 and BB2 are in the same equivalence class if they dominate and post-dominate each other, and they are in the same loop nest. When this happens, the two blocks are guaranteed to execute the same number of times.

Definition at line 272 of file SampleProfileLoaderBaseImpl.h.

◆ Filename

template<typename FT >
std::string llvm::SampleProfileLoaderBaseImpl< FT >::Filename
protected

Name of the profile file to load.

Definition at line 303 of file SampleProfileLoaderBaseImpl.h.

◆ FS

template<typename FT >
IntrusiveRefCntPtr<vfs::FileSystem> llvm::SampleProfileLoaderBaseImpl< FT >::FS
protected

VirtualFileSystem to load profile files from.

Definition at line 309 of file SampleProfileLoaderBaseImpl.h.

◆ LI

template<typename FT >
LoopInfoPtrT llvm::SampleProfileLoaderBaseImpl< FT >::LI
protected

Definition at line 277 of file SampleProfileLoaderBaseImpl.h.

◆ ORE

template<typename FT >
OptRemarkEmitterT* llvm::SampleProfileLoaderBaseImpl< FT >::ORE = nullptr
protected

Optimization Remark Emitter used to emit diagnostic remarks.

Definition at line 315 of file SampleProfileLoaderBaseImpl.h.

◆ OutlineFunctionSamples

template<typename FT >
std::map<SampleContext, FunctionSamples> llvm::SampleProfileLoaderBaseImpl< FT >::OutlineFunctionSamples
protected

Synthetic samples created by duplicating the samples of inlined functions from the original profile as if they were top level sample profiles.

Use std::map because insertion may happen while its content is referenced.

Definition at line 294 of file SampleProfileLoaderBaseImpl.h.

◆ PDT

template<typename FT >
PostDominatorTreePtrT llvm::SampleProfileLoaderBaseImpl< FT >::PDT
protected

Definition at line 276 of file SampleProfileLoaderBaseImpl.h.

◆ Predecessors

template<typename FT >
BlockEdgeMap llvm::SampleProfileLoaderBaseImpl< FT >::Predecessors
protected

Predecessors for each basic block in the CFG.

Definition at line 280 of file SampleProfileLoaderBaseImpl.h.

◆ ProbeManager

template<typename FT >
std::unique_ptr<PseudoProbeManager> llvm::SampleProfileLoaderBaseImpl< FT >::ProbeManager
protected

Definition at line 297 of file SampleProfileLoaderBaseImpl.h.

◆ PSI

template<typename FT >
ProfileSummaryInfo* llvm::SampleProfileLoaderBaseImpl< FT >::PSI = nullptr
protected

Profile Summary Info computed from sample profile.

Definition at line 312 of file SampleProfileLoaderBaseImpl.h.

◆ Reader

template<typename FT >
std::unique_ptr<SampleProfileReader> llvm::SampleProfileLoaderBaseImpl< FT >::Reader
protected

Profile reader object.

Definition at line 289 of file SampleProfileLoaderBaseImpl.h.

Referenced by llvm::SampleProfileLoaderBaseImpl< FT >::dump().

◆ RemappingFilename

template<typename FT >
std::string llvm::SampleProfileLoaderBaseImpl< FT >::RemappingFilename
protected

Name of the profile remapping file to load.

Definition at line 306 of file SampleProfileLoaderBaseImpl.h.

◆ Samples

template<typename FT >
FunctionSamples* llvm::SampleProfileLoaderBaseImpl< FT >::Samples = nullptr
protected

Samples collected for the body of this function.

Definition at line 300 of file SampleProfileLoaderBaseImpl.h.

◆ Successors

template<typename FT >
BlockEdgeMap llvm::SampleProfileLoaderBaseImpl< FT >::Successors
protected

Successors for each basic block in the CFG.

Definition at line 283 of file SampleProfileLoaderBaseImpl.h.

◆ VisitedBlocks

template<typename FT >
SmallPtrSet<const BasicBlockT *, 32> llvm::SampleProfileLoaderBaseImpl< FT >::VisitedBlocks
protected

Set of visited blocks during propagation.

Definition at line 261 of file SampleProfileLoaderBaseImpl.h.

◆ VisitedEdges

template<typename FT >
SmallSet<Edge, 32> llvm::SampleProfileLoaderBaseImpl< FT >::VisitedEdges
protected

Set of visited edges during propagation.

Definition at line 264 of file SampleProfileLoaderBaseImpl.h.


The documentation for this class was generated from the following file: