LLVM 22.0.0git
|
#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 Type * | getElementType (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 Type * | getWideType (Type *ElemTy, unsigned NumElts) |
\Returns <NumElts x ElemTy>. | |
static Instruction * | getLowest (ArrayRef< Instruction * > Instrs) |
\Returns the instruction in Instrs that is lowest in the BB. | |
static Instruction * | getLowest (ArrayRef< Value * > Vals, BasicBlock *BB) |
\Returns the lowest instruction in Vals , or nullptr if no instructions are found. | |
static Instruction * | getLastPHIOrSelf (Instruction *I) |
If I is not a PHI it returns it. | |
static Type * | tryGetCommonScalarType (ArrayRef< Value * > Bndl) |
If all values in Bndl are of the same scalar type then return it, otherwise return nullptr. | |
static Type * | getCommonScalarType (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< PackPattern > | matchPack (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) |
Definition at line 41 of file VecUtils.h.
|
inlinestatic |
Definition at line 71 of file VecUtils.h.
References areConsecutive(), assert(), llvm::cast(), DL, llvm::drop_begin(), and llvm::isa().
|
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().
|
static |
Definition at line 29 of file VecUtils.cpp.
References llvm::sandboxir::dumpImpl().
Helper dump function for debugging.
Definition at line 28 of file VecUtils.cpp.
References llvm::sandboxir::dumpImpl().
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().
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().
\Returns the first integer power of 2 that is <= Num.
Definition at line 13 of file VecUtils.cpp.
Referenced by llvm::sandboxir::SeedCollection::runOnFunction().
|
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().
|
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().
|
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().
|
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().
\Returns the total number of lanes across all values in Bndl
.
Definition at line 105 of file VecUtils.h.
References getNumLanes().
\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().
\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().
\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().
|
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().
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().