struct SLPVectorizerPass
Declaration
struct SLPVectorizerPass : public PassInfoMixin { /* full declaration omitted */ };
Description
A CRTP mix-in to automatically provide informational APIs needed for passes. This provides some boilerplate for types that are passes.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:56
Inherits from: PassInfoMixin
Member Variables
- public llvm::ScalarEvolution* SE = nullptr
- public llvm::TargetTransformInfo* TTI = nullptr
- public llvm::TargetLibraryInfo* TLI = nullptr
- public llvm::AAResults* AA = nullptr
- public llvm::LoopInfo* LI = nullptr
- public llvm::DominatorTree* DT = nullptr
- public llvm::AssumptionCache* AC = nullptr
- public llvm::DemandedBits* DB = nullptr
- public const llvm::DataLayout* DL = nullptr
- private llvm::SLPVectorizerPass::StoreListMap Stores
- The store instructions in a basic block organized by base pointer.
- private llvm::SLPVectorizerPass::GEPListMap GEPs
- The getelementptr instructions in a basic block organized by base pointer.
Method Overview
- private void collectSeedInstructions(llvm::BasicBlock * BB)
- public llvm::PreservedAnalyses run(llvm::Function & F, llvm::FunctionAnalysisManager & AM)
- public bool runImpl(llvm::Function & F, llvm::ScalarEvolution * SE_, llvm::TargetTransformInfo * TTI_, llvm::TargetLibraryInfo * TLI_, llvm::AAResults * AA_, llvm::LoopInfo * LI_, llvm::DominatorTree * DT_, llvm::AssumptionCache * AC_, llvm::DemandedBits * DB_, llvm::OptimizationRemarkEmitter * ORE_)
- private bool tryToVectorize(llvm::Instruction * I, slpvectorizer::BoUpSLP & R)
- private bool tryToVectorizeList(ArrayRef<llvm::Value *> VL, slpvectorizer::BoUpSLP & R, bool LimitForRegisterSize = false)
- private bool tryToVectorizePair(llvm::Value * A, llvm::Value * B, slpvectorizer::BoUpSLP & R)
- private bool vectorizeChainsInBlock(llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R)
- private bool vectorizeGEPIndices(llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R)
- private bool vectorizeInsertElementInst(llvm::InsertElementInst * IEI, llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R)
- private bool vectorizeInsertValueInst(llvm::InsertValueInst * IVI, llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R)
- private bool vectorizeRootInstruction(llvm::PHINode * P, llvm::Value * V, llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R, llvm::TargetTransformInfo * TTI)
- private bool vectorizeSimpleInstructions(SmallVectorImpl<llvm::Instruction *> & Instructions, llvm::BasicBlock * BB, slpvectorizer::BoUpSLP & R, bool AtTerminator)
- private bool vectorizeStoreChain(ArrayRef<llvm::Value *> Chain, slpvectorizer::BoUpSLP & R, unsigned int Idx, unsigned int MinVF)
- private bool vectorizeStoreChains(slpvectorizer::BoUpSLP & R)
- private bool vectorizeStores(ArrayRef<llvm::StoreInst *> Stores, slpvectorizer::BoUpSLP & R)
Methods
¶void collectSeedInstructions(llvm::BasicBlock* BB)
void collectSeedInstructions(llvm::BasicBlock* BB)
Description
Collect store and getelementptr instructions and organize them according to the underlying object of their pointer operands. We sort the instructions by their underlying objects to reduce the cost of consecutive access queries. TODO: We can further reduce this cost if we flush the chain creation every time we run into a memory barrier.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:89
Parameters
- llvm::BasicBlock* BB
¶llvm::PreservedAnalyses run(
llvm::Function& F,
llvm::FunctionAnalysisManager& AM)
llvm::PreservedAnalyses run(
llvm::Function& F,
llvm::FunctionAnalysisManager& AM)
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:73
Parameters
¶bool runImpl(
llvm::Function& F,
llvm::ScalarEvolution* SE_,
llvm::TargetTransformInfo* TTI_,
llvm::TargetLibraryInfo* TLI_,
llvm::AAResults* AA_,
llvm::LoopInfo* LI_,
llvm::DominatorTree* DT_,
llvm::AssumptionCache* AC_,
llvm::DemandedBits* DB_,
llvm::OptimizationRemarkEmitter* ORE_)
bool runImpl(
llvm::Function& F,
llvm::ScalarEvolution* SE_,
llvm::TargetTransformInfo* TTI_,
llvm::TargetLibraryInfo* TLI_,
llvm::AAResults* AA_,
llvm::LoopInfo* LI_,
llvm::DominatorTree* DT_,
llvm::AssumptionCache* AC_,
llvm::DemandedBits* DB_,
llvm::OptimizationRemarkEmitter* ORE_)
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:76
Parameters
- llvm::Function& F
- llvm::ScalarEvolution* SE_
- llvm::TargetTransformInfo* TTI_
- llvm::TargetLibraryInfo* TLI_
- llvm::AAResults* AA_
- llvm::LoopInfo* LI_
- llvm::DominatorTree* DT_
- llvm::AssumptionCache* AC_
- llvm::DemandedBits* DB_
- llvm::OptimizationRemarkEmitter* ORE_
¶bool tryToVectorize(llvm::Instruction* I,
slpvectorizer::BoUpSLP& R)
bool tryToVectorize(llvm::Instruction* I,
slpvectorizer::BoUpSLP& R)
Description
Try to vectorize a chain that may start at the operands of \p I.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:102
Parameters
¶bool tryToVectorizeList(
ArrayRef<llvm::Value*> VL,
slpvectorizer::BoUpSLP& R,
bool LimitForRegisterSize = false)
bool tryToVectorizeList(
ArrayRef<llvm::Value*> VL,
slpvectorizer::BoUpSLP& R,
bool LimitForRegisterSize = false)
Description
Try to vectorize a list of operands.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:98
Parameters
- ArrayRef<llvm::Value*> VL
- slpvectorizer::BoUpSLP& R
- bool LimitForRegisterSize = false
- Vectorize only using maximal allowed register size.
Returns
true if a value was vectorized.
¶bool tryToVectorizePair(llvm::Value* A,
llvm::Value* B,
slpvectorizer::BoUpSLP& R)
bool tryToVectorizePair(llvm::Value* A,
llvm::Value* B,
slpvectorizer::BoUpSLP& R)
Description
Try to vectorize a chain that starts at two arithmetic instrs.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:92
Parameters
¶bool vectorizeChainsInBlock(
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
bool vectorizeChainsInBlock(
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
Description
Scan the basic block and look for patterns that are likely to start a vectorization chain.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:133
Parameters
¶bool vectorizeGEPIndices(
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
bool vectorizeGEPIndices(
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
Description
Vectorize the index computations of the getelementptr instructions collected in GEPs.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:109
Parameters
¶bool vectorizeInsertElementInst(
llvm::InsertElementInst* IEI,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
bool vectorizeInsertElementInst(
llvm::InsertElementInst* IEI,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
Description
Try to vectorize trees that start at insertelement instructions.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:122
Parameters
¶bool vectorizeInsertValueInst(
llvm::InsertValueInst* IVI,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
bool vectorizeInsertValueInst(
llvm::InsertValueInst* IVI,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R)
Description
Try to vectorize trees that start at insertvalue instructions.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:118
Parameters
¶bool vectorizeRootInstruction(
llvm::PHINode* P,
llvm::Value* V,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R,
llvm::TargetTransformInfo* TTI)
bool vectorizeRootInstruction(
llvm::PHINode* P,
llvm::Value* V,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R,
llvm::TargetTransformInfo* TTI)
Description
Try to find horizontal reduction or otherwise vectorize a chain of binary operators.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:113
Parameters
- llvm::PHINode* P
- llvm::Value* V
- llvm::BasicBlock* BB
- slpvectorizer::BoUpSLP& R
- llvm::TargetTransformInfo* TTI
¶bool vectorizeSimpleInstructions(
SmallVectorImpl<llvm::Instruction*>&
Instructions,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R,
bool AtTerminator)
bool vectorizeSimpleInstructions(
SmallVectorImpl<llvm::Instruction*>&
Instructions,
llvm::BasicBlock* BB,
slpvectorizer::BoUpSLP& R,
bool AtTerminator)
Description
Tries to vectorize constructs started from CmpInst, InsertValueInst or InsertElementInst instructions.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:127
Parameters
- SmallVectorImpl<llvm::Instruction*>& Instructions
- llvm::BasicBlock* BB
- slpvectorizer::BoUpSLP& R
- bool AtTerminator
¶bool vectorizeStoreChain(
ArrayRef<llvm::Value*> Chain,
slpvectorizer::BoUpSLP& R,
unsigned int Idx,
unsigned int MinVF)
bool vectorizeStoreChain(
ArrayRef<llvm::Value*> Chain,
slpvectorizer::BoUpSLP& R,
unsigned int Idx,
unsigned int MinVF)
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:135
Parameters
- ArrayRef<llvm::Value*> Chain
- slpvectorizer::BoUpSLP& R
- unsigned int Idx
- unsigned int MinVF
¶bool vectorizeStoreChains(
slpvectorizer::BoUpSLP& R)
bool vectorizeStoreChains(
slpvectorizer::BoUpSLP& R)
Description
Vectorize the store instructions collected in Stores.
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:105
Parameters
¶bool vectorizeStores(
ArrayRef<llvm::StoreInst*> Stores,
slpvectorizer::BoUpSLP& R)
bool vectorizeStores(
ArrayRef<llvm::StoreInst*> Stores,
slpvectorizer::BoUpSLP& R)
Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:138
Parameters
- ArrayRef<llvm::StoreInst*> Stores
- slpvectorizer::BoUpSLP& R