LLVM: llvm::IndexedReference Class Reference (original) (raw)

Represents a memory reference as a base pointer and a set of indexing operations. More...

#include "[llvm/Analysis/LoopCacheAnalysis.h](LoopCacheAnalysis%5F8h%5Fsource.html)"

Public Member Functions
IndexedReference (Instruction &StoreOrLoadInst, const LoopInfo &LI, ScalarEvolution &SE)
Construct an indexed reference given a StoreOrLoadInst instruction.
bool isValid () const
const SCEV * getBasePointer () const
size_t getNumSubscripts () const
const SCEV * getSubscript (unsigned SubNum) const
const SCEV * getFirstSubscript () const
const SCEV * getLastSubscript () const
std::optional< bool > hasSpacialReuse (const IndexedReference &Other, unsigned CLS, AAResults &AA) const
Return true/false if the current object and the indexed reference Other are/aren't in the same cache line of size CLS.
std::optional< bool > hasTemporalReuse (const IndexedReference &Other, unsigned MaxDistance, const Loop &L, DependenceInfo &DI, AAResults &AA) const
Return true if the current object and the indexed reference Other have distance smaller than MaxDistance in the dimension associated with the given loop L.
CacheCostTy computeRefCost (const Loop &L, unsigned CLS) const
Compute the cost of the reference w.r.t.

Represents a memory reference as a base pointer and a set of indexing operations.

For example given the array reference A[i][2j+1][3k+2] in a 3-dim loop nest: for(i=0;i<n;++i) for(j=0;j<m;++j) for(k=0;k<o;++k) ... A[i][2j+1][3k+2] ... We expect: BasePointer -> A Subscripts -> [{0,+,1}<for.i>][{1,+,2}<for.j>][{2,+,3}<for.k>] Sizes -> [m][o][4]

Definition at line 49 of file LoopCacheAnalysis.h.

computeRefCost()

Compute the cost of the reference w.r.t.

the given loop L when it is considered in the innermost position in the loop nest. The cost is defined as:

Definition at line 272 of file LoopCacheAnalysis.cpp.

References assert(), CacheLineSize, computeTripCount(), llvm::dbgs(), llvm::dyn_cast(), llvm::Type::getExtendedType(), llvm::InstructionCost::getInvalid(), llvm::SCEVAddRecExpr::getLoop(), getNumSubscripts(), getSubscript(), llvm::SCEV::getType(), I, llvm::raw_ostream::indent(), and LLVM_DEBUG.

getBasePointer()

const SCEV * llvm::IndexedReference::getBasePointer ( ) const inline

getFirstSubscript()

const SCEV * llvm::IndexedReference::getFirstSubscript ( ) const inline

getLastSubscript()

const SCEV * llvm::IndexedReference::getLastSubscript ( ) const inline

getNumSubscripts()

size_t llvm::IndexedReference::getNumSubscripts ( ) const inline

getSubscript()

hasSpacialReuse()

Return true/false if the current object and the indexed reference Other are/aren't in the same cache line of size CLS.

Two references are in the same chace line iff the distance between them in the innermost dimension is less than the cache line size. Return std::nullopt if unsure.

Definition at line 160 of file LoopCacheAnalysis.cpp.

References assert(), llvm::dbgs(), llvm::dyn_cast(), getLastSubscript(), getNumSubscripts(), getSubscript(), llvm::SCEVConstant::getValue(), llvm::raw_ostream::indent(), IndexedReference(), LLVM_DEBUG, llvm::Other, and llvm::seq().

hasTemporalReuse()

Return true if the current object and the indexed reference Other have distance smaller than MaxDistance in the dimension associated with the given loop L.

Return false if the distance is not smaller than MaxDistance and std::nullopt if unsure.

Definition at line 215 of file LoopCacheAnalysis.cpp.

References assert(), D(), llvm::dbgs(), llvm::DependenceInfo::depends(), llvm::dyn_cast_or_null(), llvm::ConstantInt::getSExtValue(), llvm::SCEVConstant::getValue(), IndexedReference(), llvm::ConstantInt::isZero(), LLVM_DEBUG, and llvm::Other.

isValid()

bool llvm::IndexedReference::isValid ( ) const inline

operator<<


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