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::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< VFInfo > | llvm::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, bool Masked=false) |
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. | |
Type * | llvm::ToVectorTy (Type *Scalar, ElementCount EC) |
A helper function for converting Scalar types to vector types. | |
Type * | llvm::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, int OpdIdx) |
Identifies if the vector form of the intrinsic is overloaded on the type of the operand at index OpdIdx , or on the return type if OpdIdx is -1. | |
Intrinsic::ID | llvm::getVectorIntrinsicIDForCall (const CallInst *CI, const TargetLibraryInfo *TLI) |
Returns intrinsic ID for call. | |
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. | |
int | llvm::getSplatIndex (ArrayRef< int > Mask) |
If all non-negative Mask elements are the same value, return that value. | |
Value * | llvm::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_t > | llvm::computeMinimumValueSizes (ArrayRef< BasicBlock * > Blocks, DemandedBits &DB, const TargetTransformInfo *TTI=nullptr) |
Compute a map of integer instructions to their minimum legal type size. | |
MDNode * | llvm::uniteAccessGroups (MDNode *AccGroups1, MDNode *AccGroups2) |
Compute the union of two access-group lists. | |
MDNode * | llvm::intersectAccessGroups (const Instruction *Inst1, const Instruction *Inst2) |
Compute the access-group list of access groups that Inst1 and Inst2 are both in. | |
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]. | |
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. | |
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. | |
Value * | llvm::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 const * | llvm::VFABI::_LLVM_ = "_LLVM_" |
LLVM Internal VFABI ISA token for vector functions. | |
static constexpr char const * | 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. | |
static constexpr char const * | llvm::VFABI::MappingsAttrName = "vector-function-abi-variant" |