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)

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)

Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:73

Parameters

llvm::Function& F
llvm::FunctionAnalysisManager& AM

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)

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

llvm::Instruction* I
slpvectorizer::BoUpSLP& R

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)

Description

Try to vectorize a chain that starts at two arithmetic instrs.

Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:92

Parameters

llvm::Value* A
llvm::Value* B
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

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

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

llvm::InsertElementInst* IEI
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

llvm::InsertValueInst* IVI
llvm::BasicBlock* BB
slpvectorizer::BoUpSLP& R

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)

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)

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)

Description

Vectorize the store instructions collected in Stores.

Declared at: llvm/include/llvm/Transforms/Vectorize/SLPVectorizer.h:105

Parameters

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