LLVM
17.0.0git
|
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/LoopAccessAnalysis.h"
#include "llvm/Support/CheckedArithmetic.h"
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::ArrayRef< T > |
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory), i.e. More... | |
class | llvm::InterleaveGroup< InstTy > |
The group of interleaved loads/stores sharing the same stride and close to each other. 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 | |
llvm | |
This is an optimization pass for GlobalISel generic memory operations. | |
llvm::VFABI | |
llvm::Intrinsic | |
This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM. | |
Enumerations | |
enum | llvm::VFParamKind { llvm::VFParamKind::Vector, llvm::VFParamKind::OMP_Linear, llvm::VFParamKind::OMP_LinearRef, llvm::VFParamKind::OMP_LinearVal, llvm::VFParamKind::OMP_LinearUVal, llvm::VFParamKind::OMP_LinearPos, llvm::VFParamKind::OMP_LinearValPos, llvm::VFParamKind::OMP_LinearRefPos, llvm::VFParamKind::OMP_LinearUValPos, llvm::VFParamKind::OMP_Uniform, llvm::VFParamKind::GlobalPredicate, llvm::VFParamKind::Unknown } |
Describes the type of Parameters. More... | |
enum | llvm::VFISAKind { llvm::VFISAKind::AdvancedSIMD, llvm::VFISAKind::SVE, llvm::VFISAKind::SSE, llvm::VFISAKind::AVX, llvm::VFISAKind::AVX2, llvm::VFISAKind::AVX512, llvm::VFISAKind::LLVM, llvm::VFISAKind::Unknown } |
Describes the type of Instruction Set Architecture. More... | |
Functions | |
std::optional< VFInfo > | llvm::VFABI::tryDemangleForVFABI (StringRef MangledName, const Module &M) |
Function to construct a VFInfo out of a mangled names in the following format: More... | |
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. More... | |
VFParamKind | llvm::VFABI::getVFParamKindFromString (const StringRef Token) |
Retrieve the VFParamKind from a string token. More... | |
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. More... | |
Type * | llvm::ToVectorTy (Type *Scalar, ElementCount EC) |
A helper function for converting Scalar types to vector types. More... | |
Type * | llvm::ToVectorTy (Type *Scalar, unsigned VF) |
bool | llvm::isTriviallyVectorizable (Intrinsic::ID ID) |
Identify if the intrinsic is trivially vectorizable. More... | |
bool | llvm::isVectorIntrinsicWithScalarOpAtArg (Intrinsic::ID ID, unsigned ScalarOpdIdx) |
Identifies if the vector form of the intrinsic has a scalar operand. More... | |
bool | llvm::isVectorIntrinsicWithOverloadTypeAtArg (Intrinsic::ID ID, unsigned OpdIdx) |
Identifies if the vector form of the intrinsic has a operand that has an overloaded type. More... | |
Intrinsic::ID | llvm::getVectorIntrinsicIDForCall (const CallInst *CI, const TargetLibraryInfo *TLI) |
Returns intrinsic ID for call. More... | |
unsigned | llvm::getGEPInductionOperand (const GetElementPtrInst *Gep) |
Find the operand of the GEP that should be checked for consecutive stores. More... | |
Value * | llvm::stripGetElementPtr (Value *Ptr, ScalarEvolution *SE, Loop *Lp) |
If the argument is a GEP, then returns the operand identified by getGEPInductionOperand. More... | |
Value * | llvm::getUniqueCastUse (Value *Ptr, Loop *Lp, Type *Ty) |
If a value has only one user that is a CastInst, return it. More... | |
Value * | llvm::getStrideFromPointer (Value *Ptr, ScalarEvolution *SE, Loop *Lp) |
Get the stride of a pointer access in a loop. More... | |
Value * | llvm::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. More... | |
int | llvm::getSplatIndex (ArrayRef< int > Mask) |
If all non-negative Mask elements are the same value, return that value. More... | |
Value * | llvm::getSplatValue (const Value *V) |
Get splat value if the input is a splat vector or return nullptr. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
MapVector< Instruction *, uint64_t > | llvm::computeMinimumValueSizes (ArrayRef< BasicBlock * > Blocks, DemandedBits &DB, const TargetTransformInfo *TTI=nullptr) |
Compute a map of integer instructions to their minimum legal type size. More... | |
MDNode * | llvm::uniteAccessGroups (MDNode *AccGroups1, MDNode *AccGroups2) |
Compute the union of two access-group lists. More... | |
MDNode * | llvm::intersectAccessGroups (const Instruction *Inst1, const Instruction *Inst2) |
Compute the access-group list of access groups that Inst1 and Inst2 are both in. More... | |
Instruction * | llvm::propagateMetadata (Instruction *I, ArrayRef< Value * > VL) |
Specifically, let Kinds = [MD_tbaa, MD_alias_scope, MD_noalias, MD_fpmath, MD_nontemporal, MD_access_group]. More... | |
Constant * | llvm::createBitMaskForGaps (IRBuilderBase &Builder, unsigned VF, const InterleaveGroup< Instruction > &Group) |
Create a mask that filters the members of an interleave group where there are gaps. More... | |
llvm::SmallVector< int, 16 > | llvm::createReplicatedMask (unsigned ReplicationFactor, unsigned VF) |
Create a mask with replicated elements. More... | |
llvm::SmallVector< int, 16 > | llvm::createInterleaveMask (unsigned VF, unsigned NumVecs) |
Create an interleave shuffle mask. More... | |
llvm::SmallVector< int, 16 > | llvm::createStrideMask (unsigned Start, unsigned Stride, unsigned VF) |
Create a stride shuffle mask. More... | |
llvm::SmallVector< int, 16 > | llvm::createSequentialMask (unsigned Start, unsigned NumInts, unsigned NumUndefs) |
Create a sequential shuffle mask. More... | |
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. More... | |
Value * | llvm::concatenateVectors (IRBuilderBase &Builder, ArrayRef< Value * > Vecs) |
Concatenate a list of vectors. More... | |
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. More... | |
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. More... | |
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. More... | |
Variables | |
static constexpr const char * | llvm::VFABI::_LLVM_ = "_LLVM_" |
LLVM Internal VFABI ISA token for vector functions. More... | |
static constexpr const char * | llvm::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. More... | |
static constexpr const char * | llvm::VFABI::MappingsAttrName = "vector-function-abi-variant" |