Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::sandboxir::VecUtils Class Reference

#include "llvm/Transforms/Vectorize/SandboxVectorizer/VecUtils.h"

Classes

struct  PackPattern
 Helper struct for matchPack(). More...

Static Public Member Functions

static int getNumElements (Type *Ty)
 \Returns the number of elements in Ty.
static TypegetElementType (Type *Ty)
 Returns Ty if scalar or its element type if vector.
template<typename LoadOrStoreT>
static bool areConsecutive (LoadOrStoreT *I1, LoadOrStoreT *I2, ScalarEvolution &SE, const DataLayout &DL)
 \Returns true if I1 and I2 are load/stores accessing consecutive memory addresses.
template<typename LoadOrStoreT>
static bool areConsecutive (ArrayRef< Value * > &Bndl, ScalarEvolution &SE, const DataLayout &DL)
static unsigned getNumLanes (Type *Ty)
 \Returns the number of vector lanes of Ty or 1 if not a vector.
static unsigned getNumLanes (Value *V)
 \Returns the expected vector lanes of V or 1 if not a vector.
static unsigned getNumLanes (ArrayRef< Value * > Bndl)
 \Returns the total number of lanes across all values in Bndl.
static TypegetWideType (Type *ElemTy, unsigned NumElts)
 \Returns <NumElts x ElemTy>.
static InstructiongetLowest (ArrayRef< Instruction * > Instrs)
 \Returns the instruction in Instrs that is lowest in the BB.
static InstructiongetLowest (ArrayRef< Value * > Vals, BasicBlock *BB)
 \Returns the lowest instruction in Vals, or nullptr if no instructions are found.
static InstructiongetLastPHIOrSelf (Instruction *I)
 If I is not a PHI it returns it.
static TypetryGetCommonScalarType (ArrayRef< Value * > Bndl)
 If all values in Bndl are of the same scalar type then return it, otherwise return nullptr.
static TypegetCommonScalarType (ArrayRef< Value * > Bndl)
 Similar to tryGetCommonScalarType() but will assert that there is a common type.
static LLVM_ABI unsigned getFloorPowerOf2 (unsigned Num)
 \Returns the first integer power of 2 that is <= Num.
static std::optional< PackPatternmatchPack (Instruction *I)
 If I is the last instruction of a pack pattern (i.e., an InsertElement into a vector), then this function returns the instructions in the pack and the operands in the pack, else returns nullopt.
static LLVM_DUMP_METHOD void dump (ArrayRef< Value * > Bndl)
 Helper dump function for debugging.
static LLVM_DUMP_METHOD void dump (ArrayRef< Instruction * > Bndl)

Detailed Description

Definition at line 41 of file VecUtils.h.

Member Function Documentation

◆ areConsecutive() [1/2]

template<typename LoadOrStoreT>
bool llvm::sandboxir::VecUtils::areConsecutive ( ArrayRef< Value * > & Bndl,
ScalarEvolution & SE,
const DataLayout & DL )
inlinestatic

Definition at line 71 of file VecUtils.h.

References areConsecutive(), assert(), llvm::cast(), DL, llvm::drop_begin(), and llvm::isa().

◆ areConsecutive() [2/2]

template<typename LoadOrStoreT>
bool llvm::sandboxir::VecUtils::areConsecutive ( LoadOrStoreT * I1,
LoadOrStoreT * I2,
ScalarEvolution & SE,
const DataLayout & DL )
inlinestatic

\Returns true if I1 and I2 are load/stores accessing consecutive memory addresses.

Definition at line 58 of file VecUtils.h.

References DL, llvm::sandboxir::Utils::getNumBits(), and llvm::sandboxir::Utils::getPointerDiffInBytes().

Referenced by areConsecutive().

◆ dump() [1/2]

void llvm::sandboxir::VecUtils::dump ( ArrayRef< Instruction * > Bndl)
static

Definition at line 29 of file VecUtils.cpp.

References llvm::sandboxir::dumpImpl().

◆ dump() [2/2]

void llvm::sandboxir::VecUtils::dump ( ArrayRef< Value * > Bndl)
static

Helper dump function for debugging.

Definition at line 28 of file VecUtils.cpp.

References llvm::sandboxir::dumpImpl().

◆ getCommonScalarType()

Type * llvm::sandboxir::VecUtils::getCommonScalarType ( ArrayRef< Value * > Bndl)
inlinestatic

Similar to tryGetCommonScalarType() but will assert that there is a common type.

So this is faster in release builds as it won't iterate through the values.

Definition at line 191 of file VecUtils.h.

References assert(), getElementType(), llvm::sandboxir::Utils::getExpectedType(), and tryGetCommonScalarType().

◆ getElementType()

Type * llvm::sandboxir::VecUtils::getElementType ( Type * Ty)
inlinestatic

Returns Ty if scalar or its element type if vector.

Definition at line 51 of file VecUtils.h.

References llvm::cast(), and llvm::sandboxir::Type::isVectorTy().

Referenced by getCommonScalarType(), llvm::sandboxir::SeedCollection::runOnFunction(), and tryGetCommonScalarType().

◆ getFloorPowerOf2()

unsigned llvm::sandboxir::VecUtils::getFloorPowerOf2 ( unsigned Num)
static

\Returns the first integer power of 2 that is <= Num.

Definition at line 13 of file VecUtils.cpp.

Referenced by llvm::sandboxir::SeedCollection::runOnFunction().

◆ getLastPHIOrSelf()

Instruction * llvm::sandboxir::VecUtils::getLastPHIOrSelf ( Instruction * I)
inlinestatic

If I is not a PHI it returns it.

Else it walks down the instruction chain looking for the last PHI and returns it. \Returns nullptr if I is nullptr.

Definition at line 164 of file VecUtils.h.

References I, and llvm::isa().

Referenced by llvm::sandboxir::getInsertPointAfterInstrs().

◆ getLowest() [1/2]

Instruction * llvm::sandboxir::VecUtils::getLowest ( ArrayRef< Instruction * > Instrs)
inlinestatic

\Returns the instruction in Instrs that is lowest in the BB.

Expects that all instructions are in the same BB.

Definition at line 124 of file VecUtils.h.

References llvm::sandboxir::Instruction::comesBefore(), llvm::drop_begin(), llvm::ArrayRef< T >::front(), and I.

Referenced by llvm::sandboxir::getInsertPointAfterInstrs(), and llvm::sandboxir::Scheduler::trySchedule().

◆ getLowest() [2/2]

Instruction * llvm::sandboxir::VecUtils::getLowest ( ArrayRef< Value * > Vals,
BasicBlock * BB )
inlinestatic

\Returns the lowest instruction in Vals, or nullptr if no instructions are found.

Skips instructions not in BB.

Definition at line 134 of file VecUtils.h.

References llvm::sandboxir::BasicBlock(), llvm::cast(), llvm::sandboxir::Instruction::comesBefore(), llvm::dyn_cast(), llvm::ArrayRef< T >::end(), llvm::find_if(), I, llvm::isa(), and llvm::make_range().

◆ getNumElements()

int llvm::sandboxir::VecUtils::getNumElements ( Type * Ty)
inlinestatic

\Returns the number of elements in Ty.

That is the number of lanes if a fixed vector or 1 if scalar. ScalableVectors have unknown size and therefore are unsupported.

Definition at line 46 of file VecUtils.h.

References assert(), llvm::cast(), and llvm::isa().

◆ getNumLanes() [1/3]

unsigned llvm::sandboxir::VecUtils::getNumLanes ( ArrayRef< Value * > Bndl)
inlinestatic

\Returns the total number of lanes across all values in Bndl.

Definition at line 105 of file VecUtils.h.

References getNumLanes().

◆ getNumLanes() [2/3]

unsigned llvm::sandboxir::VecUtils::getNumLanes ( Type * Ty)
inlinestatic

\Returns the number of vector lanes of Ty or 1 if not a vector.

NOTE: It asserts that Ty is a fixed vector type.

Definition at line 91 of file VecUtils.h.

References assert(), llvm::dyn_cast(), and llvm::isa().

Referenced by getNumLanes(), getNumLanes(), matchPack(), and llvm::sandboxir::InstrMaps::registerVector().

◆ getNumLanes() [3/3]

unsigned llvm::sandboxir::VecUtils::getNumLanes ( Value * V)
inlinestatic

\Returns the expected vector lanes of V or 1 if not a vector.

NOTE: It asserts that V is a fixed vector.

Definition at line 100 of file VecUtils.h.

References llvm::sandboxir::Utils::getExpectedType(), and getNumLanes().

◆ getWideType()

Type * llvm::sandboxir::VecUtils::getWideType ( Type * ElemTy,
unsigned NumElts )
inlinestatic

\Returns <NumElts x ElemTy>.

It works for both scalar and vector ElemTy.

Definition at line 114 of file VecUtils.h.

References llvm::cast(), and llvm::sandboxir::FixedVectorType::get().

◆ matchPack()

std::optional< PackPattern > llvm::sandboxir::VecUtils::matchPack ( Instruction * I)
inlinestatic

If I is the last instruction of a pack pattern (i.e., an InsertElement into a vector), then this function returns the instructions in the pack and the operands in the pack, else returns nullopt.

Here is an example of a matched pattern: PackA0 = insertelement <2 x i8> poison, i8 v0, i64 0 PackA1 = insertelement <2 x i8> PackA0, i8 v1, i64 1 TODO: this currently detects only simple canonicalized patterns.

Definition at line 226 of file VecUtils.h.

References assert(), llvm::dyn_cast(), getNumLanes(), llvm::sandboxir::User::getOperand(), llvm::sandboxir::Instruction::getParent(), I, llvm::isa(), llvm::reverse(), and llvm::seq().

Referenced by llvm::sandboxir::PackReuse::runOnRegion().

◆ tryGetCommonScalarType()

Type * llvm::sandboxir::VecUtils::tryGetCommonScalarType ( ArrayRef< Value * > Bndl)
inlinestatic

If all values in Bndl are of the same scalar type then return it, otherwise return nullptr.

Definition at line 175 of file VecUtils.h.

References llvm::drop_begin(), getElementType(), and llvm::sandboxir::Utils::getExpectedType().

Referenced by getCommonScalarType().


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