|
LLVM 23.0.0git
|
#include "llvm/Transforms/Vectorize/SandboxVectorizer/VecUtils.h"
Classes | |
| class | LaneValueEnumerator |
| Iterate over all lanes and Value pairs. More... | |
| 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 Value * | unpack (Value *FromVec, Type *ExtrTy, unsigned Lane, BasicBlock::iterator WhereIt) |
Emits the necessary instruction sequence to extract element of type ExtrTy at Lane from FromVec. | |
| template<typename ValueContainerT> | |
| static auto | enumerateLanes (const ValueContainerT &Range) |
| Helper for creating LaneValueEnumerator ranges. | |
| 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 42 of file VecUtils.h.
|
inlinestatic |
Definition at line 72 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 59 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().
|
inlinestatic |
Helper for creating LaneValueEnumerator ranges.
Can be used in for loops like: for (auto [Lane, V] : enumerateLanes(Range))
Definition at line 357 of file VecUtils.h.
References llvm::make_range(), and Range.
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 192 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 52 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 165 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 125 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 135 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 47 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 106 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 92 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 101 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 115 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 227 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 176 of file VecUtils.h.
References llvm::drop_begin(), getElementType(), and llvm::sandboxir::Utils::getExpectedType().
Referenced by getCommonScalarType().
|
inlinestatic |
Emits the necessary instruction sequence to extract element of type ExtrTy at Lane from FromVec.
Emits instructions before WhereIt. Returns the extracted value. Note: This handles both vectors and scalars. In the vector case it extracts an N-wide element (with N dictated by ExtrTy).
Definition at line 271 of file VecUtils.h.
References assert(), llvm::cast(), llvm::sandboxir::ExtractElementInst::create(), llvm::sandboxir::ShuffleVectorInst::create(), E(), llvm::sandboxir::PoisonValue::get(), llvm::sandboxir::Value::getContext(), llvm::sandboxir::Type::getInt32Ty(), llvm::sandboxir::ConstantInt::getSigned(), llvm::sandboxir::Value::getType(), llvm::isa(), and llvm::sandboxir::Type::isVectorTy().