LLVM
8.0.1
|
The group of interleaved loads/stores sharing the same stride and close to each other. More...
#include "llvm/Analysis/VectorUtils.h"
Public Member Functions | |
InterleaveGroup (unsigned Factor, bool Reverse, unsigned Align) | |
InterleaveGroup (InstTy *Instr, int Stride, unsigned Align) | |
bool | isReverse () const |
unsigned | getFactor () const |
unsigned | getAlignment () const |
unsigned | getNumMembers () const |
bool | insertMember (InstTy *Instr, int Index, unsigned NewAlign) |
Try to insert a new member Instr with index Index and alignment NewAlign . More... | |
InstTy * | getMember (unsigned Index) const |
Get the member with the given index Index . More... | |
unsigned | getIndex (const InstTy *Instr) const |
Get the index for the given member. More... | |
InstTy * | getInsertPos () const |
void | setInsertPos (InstTy *Inst) |
void | addMetadata (InstTy *NewInst) const |
Add metadata (e.g. More... | |
bool | requiresScalarEpilogue () const |
Returns true if this Group requires a scalar iteration to handle gaps. More... | |
template<> | |
void | addMetadata (Instruction *NewInst) const |
The group of interleaved loads/stores sharing the same stride and close to each other.
Each member in this group has an index starting from 0, and the largest index should be less than interleaved factor, which is equal to the absolute value of the access's stride.
E.g. An interleaved load group of factor 4: for (unsigned i = 0; i < 1024; i+=4) { a = A[i]; // Member of index 0 b = A[i+1]; // Member of index 1 d = A[i+3]; // Member of index 3 ... }
An interleaved store group of factor 4: for (unsigned i = 0; i < 1024; i+=4) { ... A[i] = a; // Member of index 0 A[i+1] = b; // Member of index 1 A[i+2] = c; // Member of index 2 A[i+3] = d; // Member of index 3 }
Note: the interleaved load group could have gaps (missing members), but the interleaved store group doesn't allow gaps.
Definition at line 27 of file VectorUtils.h.
|
inline |
Definition at line 254 of file VectorUtils.h.
|
inline |
Definition at line 257 of file VectorUtils.h.
void InterleaveGroup::addMetadata | ( | InstT * | NewInst | ) | const |
Add metadata (e.g.
alias info) from the instructions in this group to NewInst
.
FIXME: this function currently does not add noalias metadata a'la addNewMedata. To do that we need to compute the intersection of the noalias info from all members.
Definition at line 1061 of file VectorUtils.cpp.
Referenced by llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
void llvm::InterleaveGroup< Instruction >::addMetadata | ( | Instruction * | NewInst | ) | const |
Definition at line 1067 of file VectorUtils.cpp.
|
inline |
Definition at line 270 of file VectorUtils.h.
Referenced by llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Definition at line 269 of file VectorUtils.h.
Referenced by llvm::createBitMaskForGaps(), llvm::InterleavedAccessInfo::requiresScalarEpilogue(), llvm::LoopVectorizationCostModel::setWideningDecision(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Get the index for the given member.
Unlike the key in the member map, the index starts from 0.
Definition at line 321 of file VectorUtils.h.
Referenced by llvm::InterleavedAccessInfo::analyzeInterleaving(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Definition at line 330 of file VectorUtils.h.
Referenced by llvm::LoopVectorizationCostModel::setWideningDecision(), llvm::VPRecipeBuilder::tryToCreateRecipe(), llvm::VPRecipeBuilder::tryToInterleaveMemory(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Get the member with the given index Index
.
Definition at line 310 of file VectorUtils.h.
Referenced by llvm::createBitMaskForGaps(), llvm::InterleavedAccessInfo::requiresScalarEpilogue(), llvm::LoopVectorizationCostModel::setWideningDecision(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Definition at line 271 of file VectorUtils.h.
Referenced by llvm::createBitMaskForGaps().
|
inline |
Try to insert a new member Instr
with index Index
and alignment NewAlign
.
The index is related to the leader and it could be negative if it is the new leader.
Definition at line 278 of file VectorUtils.h.
Referenced by llvm::InterleavedAccessInfo::analyzeInterleaving(), and llvm::VPValue::replaceAllUsesWith().
|
inline |
Definition at line 268 of file VectorUtils.h.
Referenced by llvm::createBitMaskForGaps(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Returns true if this Group requires a scalar iteration to handle gaps.
Definition at line 342 of file VectorUtils.h.
Referenced by llvm::InterleavedAccessInfo::invalidateGroupsRequiringScalarEpilogue(), and llvm::InnerLoopVectorizer::vectorizeInterleaveGroup().
|
inline |
Definition at line 331 of file VectorUtils.h.
Referenced by llvm::InterleavedAccessInfo::analyzeInterleaving().