LLVM 22.0.0git
llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator Class Reference

Merges shuffle masks and emits final shuffle instruction, if required. More...

Inheritance diagram for llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator:
[legend]

Public Member Functions

 ShuffleCostEstimator (Type *ScalarTy, TargetTransformInfo &TTI, ArrayRef< Value * > VectorizedVals, BoUpSLP &R, SmallPtrSetImpl< Value * > &CheckedExtracts)
ValueadjustExtracts (const TreeEntry *E, MutableArrayRef< int > Mask, ArrayRef< std::optional< TTI::ShuffleKind > > ShuffleKinds, unsigned NumParts, bool &UseVecBaseAsInput)
std::optional< InstructionCostneedToDelay (const TreeEntry *, ArrayRef< SmallVector< const TreeEntry * > >) const
 Checks if the specified entry E needs to be delayed because of its dependency nodes.
void resetForSameNode ()
 Reset the builder to handle perfect diamond match.
void add (const TreeEntry &E1, const TreeEntry &E2, ArrayRef< int > Mask)
void add (const TreeEntry &E1, ArrayRef< int > Mask)
void add (Value *V1, Value *V2, ArrayRef< int > Mask)
 Adds 2 input vectors and the mask for their shuffling.
void add (Value *V1, ArrayRef< int > Mask, bool ForExtracts=false)
 Adds another one input vector and the mask for the shuffling.
Valuegather (ArrayRef< Value * > VL, unsigned MaskVF=0, Value *Root=nullptr)
InstructionCost createFreeze (InstructionCost Cost)
InstructionCost finalize (ArrayRef< int > ExtMask, ArrayRef< std::pair< const TreeEntry *, unsigned > > SubVectors, ArrayRef< int > SubVectorsMask, unsigned VF=0, function_ref< void(Value *&, SmallVectorImpl< int > &, function_ref< Value *(Value *, Value *, ArrayRef< int >)>)> Action={})
 Finalize emission of the shuffles.
 ~ShuffleCostEstimator ()

Detailed Description

Merges shuffle masks and emits final shuffle instruction, if required.

It supports shuffling of 2 input vectors. It implements lazy shuffles emission, when the actual shuffle instruction is generated only if this is actually required. Otherwise, the shuffle instruction emission is delayed till the end of the process, to reduce the number of emitted instructions and further analysis/transformations.

Definition at line 13246 of file SLPVectorizer.cpp.

Constructor & Destructor Documentation

◆ ShuffleCostEstimator()

llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::ShuffleCostEstimator ( Type * ScalarTy,
TargetTransformInfo & TTI,
ArrayRef< Value * > VectorizedVals,
BoUpSLP & R,
SmallPtrSetImpl< Value * > & CheckedExtracts )
inline

Definition at line 13778 of file SLPVectorizer.cpp.

References llvm::slpvectorizer::BoUpSLP::BoUpSLP().

◆ ~ShuffleCostEstimator()

llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::~ShuffleCostEstimator ( )
inline

Definition at line 14157 of file SLPVectorizer.cpp.

References assert().

Member Function Documentation

◆ add() [1/4]

void llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::add ( const TreeEntry & E1,
ArrayRef< int > Mask )
inline

◆ add() [2/4]

void llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::add ( const TreeEntry & E1,
const TreeEntry & E2,
ArrayRef< int > Mask )
inline

◆ add() [3/4]

void llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::add ( Value * V1,
ArrayRef< int > Mask,
bool ForExtracts = false )
inline

Adds another one input vector and the mask for the shuffling.

Definition at line 13972 of file SLPVectorizer.cpp.

References llvm::all_of(), assert(), llvm::cast(), llvm::enumerate(), llvm::isa(), P, and llvm::PoisonMaskElem.

◆ add() [4/4]

void llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::add ( Value * V1,
Value * V2,
ArrayRef< int > Mask )
inline

Adds 2 input vectors and the mask for their shuffling.

Definition at line 13955 of file SLPVectorizer.cpp.

References llvm::all_of(), assert(), llvm::cast(), llvm::enumerate(), P, and llvm::PoisonMaskElem.

◆ adjustExtracts()

Value * llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::adjustExtracts ( const TreeEntry * E,
MutableArrayRef< int > Mask,
ArrayRef< std::optional< TTI::ShuffleKind > > ShuffleKinds,
unsigned NumParts,
bool & UseVecBaseAsInput )
inline

Definition at line 13784 of file SLPVectorizer.cpp.

References llvm::any_of(), llvm::ArrayRef(), and llvm::reorderScalars().

◆ createFreeze()

InstructionCost llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::createFreeze ( InstructionCost Cost)
inline

Definition at line 14054 of file SLPVectorizer.cpp.

◆ finalize()

InstructionCost llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::finalize ( ArrayRef< int > ExtMask,
ArrayRef< std::pair< const TreeEntry *, unsigned > > SubVectors,
ArrayRef< int > SubVectorsMask,
unsigned VF = 0,
function_ref< void(Value *&, SmallVectorImpl< int > &, function_ref< Value *(Value *, Value *, ArrayRef< int >)>)> Action = {} )
inline

Finalize emission of the shuffles.

Definition at line 14056 of file SLPVectorizer.cpp.

◆ gather()

◆ needToDelay()

std::optional< InstructionCost > llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::needToDelay ( const TreeEntry * ,
ArrayRef< SmallVector< const TreeEntry * > >  ) const
inline

Checks if the specified entry E needs to be delayed because of its dependency nodes.

Definition at line 13899 of file SLPVectorizer.cpp.

◆ resetForSameNode()

void llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::resetForSameNode ( )
inline

Reset the builder to handle perfect diamond match.

Definition at line 13905 of file SLPVectorizer.cpp.


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