LLVM 17.0.0git
Classes | Namespaces | Enumerations | Functions | Variables
VectorUtils.h File Reference
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/LoopAccessAnalysis.h"
#include "llvm/Support/CheckedArithmetic.h"
Include dependency graph for VectorUtils.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llvm::VFParameter
 Encapsulates information needed to describe a parameter. More...
 
struct  llvm::VFShape
 Contains the information about the kind of vectorization available. More...
 
struct  llvm::VFInfo
 Holds the VFShape for a specific scalar to vector function mapping. More...
 
class  llvm::VFDatabase
 The Vector Function Database. More...
 
class  llvm::InterleaveGroup< InstTy >
 The group of interleaved loads/stores sharing the same stride and close to each other. More...
 
class  llvm::InterleavedAccessInfo
 Drive the analysis of interleaved memory accesses in the loop. More...
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::VFABI
 
namespace  llvm::Intrinsic
 This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM.
 

Enumerations

enum class  llvm::VFParamKind {
  llvm::Vector , llvm::OMP_Linear , llvm::OMP_LinearRef , llvm::OMP_LinearVal ,
  llvm::OMP_LinearUVal , llvm::OMP_LinearPos , llvm::OMP_LinearValPos , llvm::OMP_LinearRefPos ,
  llvm::OMP_LinearUValPos , llvm::OMP_Uniform , llvm::GlobalPredicate , llvm::Unknown
}
 Describes the type of Parameters. More...
 
enum class  llvm::VFISAKind {
  llvm::AdvancedSIMD , llvm::SVE , llvm::SSE , llvm::AVX ,
  llvm::AVX2 , llvm::AVX512 , llvm::LLVM , llvm::Unknown
}
 Describes the type of Instruction Set Architecture. More...
 

Functions

std::optional< VFInfollvm::VFABI::tryDemangleForVFABI (StringRef MangledName, const Module &M)
 Function to construct a VFInfo out of a mangled names in the following format:
 
std::string llvm::VFABI::mangleTLIVectorName (StringRef VectorName, StringRef ScalarName, unsigned numArgs, ElementCount VF)
 This routine mangles the given VectorName according to the LangRef specification for vector-function-abi-variant attribute and is specific to the TLI mappings.
 
VFParamKind llvm::VFABI::getVFParamKindFromString (const StringRef Token)
 Retrieve the VFParamKind from a string token.
 
void llvm::VFABI::getVectorVariantNames (const CallInst &CI, SmallVectorImpl< std::string > &VariantMappings)
 Populates a set of strings representing the Vector Function ABI variants associated to the CallInst CI.
 
Typellvm::ToVectorTy (Type *Scalar, ElementCount EC)
 A helper function for converting Scalar types to vector types.
 
Typellvm::ToVectorTy (Type *Scalar, unsigned VF)
 
bool llvm::isTriviallyVectorizable (Intrinsic::ID ID)
 Identify if the intrinsic is trivially vectorizable.
 
bool llvm::isVectorIntrinsicWithScalarOpAtArg (Intrinsic::ID ID, unsigned ScalarOpdIdx)
 Identifies if the vector form of the intrinsic has a scalar operand.
 
bool llvm::isVectorIntrinsicWithOverloadTypeAtArg (Intrinsic::ID ID, unsigned OpdIdx)
 Identifies if the vector form of the intrinsic has a operand that has an overloaded type.
 
Intrinsic::ID llvm::getVectorIntrinsicIDForCall (const CallInst *CI, const TargetLibraryInfo *TLI)
 Returns intrinsic ID for call.
 
unsigned llvm::getGEPInductionOperand (const GetElementPtrInst *Gep)
 Find the operand of the GEP that should be checked for consecutive stores.
 
Valuellvm::stripGetElementPtr (Value *Ptr, ScalarEvolution *SE, Loop *Lp)
 If the argument is a GEP, then returns the operand identified by getGEPInductionOperand.
 
Valuellvm::getUniqueCastUse (Value *Ptr, Loop *Lp, Type *Ty)
 If a value has only one user that is a CastInst, return it.
 
Valuellvm::getStrideFromPointer (Value *Ptr, ScalarEvolution *SE, Loop *Lp)
 Get the stride of a pointer access in a loop.
 
Valuellvm::findScalarElement (Value *V, unsigned EltNo)
 Given a vector and an element number, see if the scalar value is already around as a register, for example if it were inserted then extracted from the vector.
 
int llvm::getSplatIndex (ArrayRef< int > Mask)
 If all non-negative Mask elements are the same value, return that value.
 
Valuellvm::getSplatValue (const Value *V)
 Get splat value if the input is a splat vector or return nullptr.
 
bool llvm::isSplatValue (const Value *V, int Index=-1, unsigned Depth=0)
 Return true if each element of the vector value V is poisoned or equal to every other non-poisoned element.
 
bool llvm::getShuffleDemandedElts (int SrcWidth, ArrayRef< int > Mask, const APInt &DemandedElts, APInt &DemandedLHS, APInt &DemandedRHS, bool AllowUndefElts=false)
 Transform a shuffle mask's output demanded element mask into demanded element masks for the 2 operands, returns false if the mask isn't valid.
 
void llvm::narrowShuffleMaskElts (int Scale, ArrayRef< int > Mask, SmallVectorImpl< int > &ScaledMask)
 Replace each shuffle mask index with the scaled sequential indices for an equivalent mask of narrowed elements.
 
bool llvm::widenShuffleMaskElts (int Scale, ArrayRef< int > Mask, SmallVectorImpl< int > &ScaledMask)
 Try to transform a shuffle mask by replacing elements with the scaled index for an equivalent mask of widened elements.
 
void llvm::getShuffleMaskWithWidestElts (ArrayRef< int > Mask, SmallVectorImpl< int > &ScaledMask)
 Repetitively apply widenShuffleMaskElts() for as long as it succeeds, to get the shuffle mask with widest possible elements.
 
void llvm::processShuffleMasks (ArrayRef< int > Mask, unsigned NumOfSrcRegs, unsigned NumOfDestRegs, unsigned NumOfUsedRegs, function_ref< void()> NoInputAction, function_ref< void(ArrayRef< int >, unsigned, unsigned)> SingleInputAction, function_ref< void(ArrayRef< int >, unsigned, unsigned)> ManyInputsAction)
 Splits and processes shuffle mask depending on the number of input and output registers.
 
MapVector< Instruction *, uint64_tllvm::computeMinimumValueSizes (ArrayRef< BasicBlock * > Blocks, DemandedBits &DB, const TargetTransformInfo *TTI=nullptr)
 Compute a map of integer instructions to their minimum legal type size.
 
MDNodellvm::uniteAccessGroups (MDNode *AccGroups1, MDNode *AccGroups2)
 Compute the union of two access-group lists.
 
MDNodellvm::intersectAccessGroups (const Instruction *Inst1, const Instruction *Inst2)
 Compute the access-group list of access groups that Inst1 and Inst2 are both in.
 
Instructionllvm::propagateMetadata (Instruction *I, ArrayRef< Value * > VL)
 Specifically, let Kinds = [MD_tbaa, MD_alias_scope, MD_noalias, MD_fpmath, MD_nontemporal, MD_access_group].
 
Constantllvm::createBitMaskForGaps (IRBuilderBase &Builder, unsigned VF, const InterleaveGroup< Instruction > &Group)
 Create a mask that filters the members of an interleave group where there are gaps.
 
llvm::SmallVector< int, 16 > llvm::createReplicatedMask (unsigned ReplicationFactor, unsigned VF)
 Create a mask with replicated elements.
 
llvm::SmallVector< int, 16 > llvm::createInterleaveMask (unsigned VF, unsigned NumVecs)
 Create an interleave shuffle mask.
 
llvm::SmallVector< int, 16 > llvm::createStrideMask (unsigned Start, unsigned Stride, unsigned VF)
 Create a stride shuffle mask.
 
llvm::SmallVector< int, 16 > llvm::createSequentialMask (unsigned Start, unsigned NumInts, unsigned NumUndefs)
 Create a sequential shuffle mask.
 
llvm::SmallVector< int, 16 > llvm::createUnaryMask (ArrayRef< int > Mask, unsigned NumElts)
 Given a shuffle mask for a binary shuffle, create the equivalent shuffle mask assuming both operands are identical.
 
Valuellvm::concatenateVectors (IRBuilderBase &Builder, ArrayRef< Value * > Vecs)
 Concatenate a list of vectors.
 
bool llvm::maskIsAllZeroOrUndef (Value *Mask)
 Given a mask vector of i1, Return true if all of the elements of this predicate mask are known to be false or undef.
 
bool llvm::maskIsAllOneOrUndef (Value *Mask)
 Given a mask vector of i1, Return true if all of the elements of this predicate mask are known to be true or undef.
 
APInt llvm::possiblyDemandedEltsInMask (Value *Mask)
 Given a mask vector of the form <Y x i1>, return an APInt (of bitwidth Y) for each lane which may be active.
 

Variables

static constexpr char constllvm::VFABI::_LLVM_ = "_LLVM_"
 LLVM Internal VFABI ISA token for vector functions.
 
static constexpr char constllvm::VFABI::_LLVM_Scalarize_ = "_LLVM_Scalarize_"
 Prefix for internal name redirection for vector function that tells the compiler to scalarize the call using the scalar name of the function.
 
static constexpr char constllvm::VFABI::MappingsAttrName = "vector-function-abi-variant"