LLVM 22.0.0git
llvm::codelayout Namespace Reference

Classes

struct  CDSortConfig
 Algorithm-specific params for Cache-Directed Sort. More...
struct  EdgeCount

Typedefs

using EdgeT = std::pair<uint64_t, uint64_t>

Functions

LLVM_ABI std::vector< uint64_tcomputeExtTspLayout (ArrayRef< uint64_t > NodeSizes, ArrayRef< uint64_t > NodeCounts, ArrayRef< EdgeCount > EdgeCounts)
 Find a layout of nodes (basic blocks) of a given CFG optimizing jump locality and thus processor I-cache utilization.
LLVM_ABI double calcExtTspScore (ArrayRef< uint64_t > Order, ArrayRef< uint64_t > NodeSizes, ArrayRef< EdgeCount > EdgeCounts)
 Estimate the "quality" of a given node order in CFG.
LLVM_ABI double calcExtTspScore (ArrayRef< uint64_t > NodeSizes, ArrayRef< EdgeCount > EdgeCounts)
 Estimate the "quality" of the current node order in CFG.
LLVM_ABI std::vector< uint64_tcomputeCacheDirectedLayout (ArrayRef< uint64_t > FuncSizes, ArrayRef< uint64_t > FuncCounts, ArrayRef< EdgeCount > CallCounts, ArrayRef< uint64_t > CallOffsets)
 Apply a Cache-Directed Sort for functions represented by a call graph.
LLVM_ABI std::vector< uint64_tcomputeCacheDirectedLayout (const CDSortConfig &Config, ArrayRef< uint64_t > FuncSizes, ArrayRef< uint64_t > FuncCounts, ArrayRef< EdgeCount > CallCounts, ArrayRef< uint64_t > CallOffsets)
 Apply a Cache-Directed Sort with a custom config.

Typedef Documentation

◆ EdgeT

Definition at line 25 of file CodeLayout.h.

Function Documentation

◆ calcExtTspScore() [1/2]

double llvm::codelayout::calcExtTspScore ( ArrayRef< uint64_t > NodeSizes,
ArrayRef< EdgeCount > EdgeCounts )

Estimate the "quality" of the current node order in CFG.

Definition at line 1449 of file CodeLayout.cpp.

References calcExtTspScore(), and llvm::ArrayRef< T >::size().

◆ calcExtTspScore() [2/2]

double llvm::codelayout::calcExtTspScore ( ArrayRef< uint64_t > Order,
ArrayRef< uint64_t > NodeSizes,
ArrayRef< EdgeCount > EdgeCounts )

Estimate the "quality" of a given node order in CFG.

The higher the score, the better the order is. The score is designed to reflect the locality of the given order, which is anti-correlated with the number of I-cache misses in a typical execution of the function.

Definition at line 1428 of file CodeLayout.cpp.

References llvm::ArrayRef< T >::size().

Referenced by calcExtTspScore().

◆ computeCacheDirectedLayout() [1/2]

std::vector< uint64_t > llvm::codelayout::computeCacheDirectedLayout ( ArrayRef< uint64_t > FuncSizes,
ArrayRef< uint64_t > FuncCounts,
ArrayRef< EdgeCount > CallCounts,
ArrayRef< uint64_t > CallOffsets )

Apply a Cache-Directed Sort for functions represented by a call graph.

The placement is done by optimizing the call locality by co-locating frequently executed functions. FuncSizes: The sizes of the nodes (in bytes). FuncCounts: The execution counts of the nodes in the profile. CallCounts: The execution counts of every edge (jump) in the profile. The map also defines the edges in CFG and should include 0-count edges. CallOffsets: The offsets of the calls from their source nodes.

Returns
The best function order found.

Definition at line 1471 of file CodeLayout.cpp.

References CacheEntries, llvm::codelayout::CDSortConfig::CacheEntries, CacheSize, llvm::codelayout::CDSortConfig::CacheSize, CDMaxChainSize, computeCacheDirectedLayout(), DistancePower, llvm::codelayout::CDSortConfig::DistancePower, FrequencyScale, llvm::codelayout::CDSortConfig::FrequencyScale, and llvm::codelayout::CDSortConfig::MaxChainSize.

Referenced by computeCacheDirectedLayout().

◆ computeCacheDirectedLayout() [2/2]

std::vector< uint64_t > llvm::codelayout::computeCacheDirectedLayout ( const CDSortConfig & Config,
ArrayRef< uint64_t > FuncSizes,
ArrayRef< uint64_t > FuncCounts,
ArrayRef< EdgeCount > CallCounts,
ArrayRef< uint64_t > CallOffsets )

Apply a Cache-Directed Sort with a custom config.

Definition at line 1457 of file CodeLayout.cpp.

References assert(), and llvm::ArrayRef< T >::size().

◆ computeExtTspLayout()

std::vector< uint64_t > llvm::codelayout::computeExtTspLayout ( ArrayRef< uint64_t > NodeSizes,
ArrayRef< uint64_t > NodeCounts,
ArrayRef< EdgeCount > EdgeCounts )

Find a layout of nodes (basic blocks) of a given CFG optimizing jump locality and thus processor I-cache utilization.

This is achieved via increasing the number of fall-through jumps and co-locating frequently executed nodes together. The nodes are assumed to be indexed by integers from [0, |V|) so that the current order is the identity permutation. NodeSizes: The sizes of the nodes (in bytes). NodeCounts: The execution counts of the nodes in the profile. EdgeCounts: The execution counts of every edge (jump) in the profile. The map also defines the edges in CFG and should include 0-count edges.

Returns
The best block order found.

Definition at line 1411 of file CodeLayout.cpp.

References assert(), and llvm::ArrayRef< T >::size().