LLVM 17.0.0git
Functions | Variables
llvm::VFABI Namespace Reference

Functions

std::optional< VFInfotryDemangleForVFABI (StringRef MangledName, const Module &M)
 Function to construct a VFInfo out of a mangled names in the following format:
 
std::string 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 getVFParamKindFromString (const StringRef Token)
 Retrieve the VFParamKind from a string token.
 
void getVectorVariantNames (const CallInst &CI, SmallVectorImpl< std::string > &VariantMappings)
 Populates a set of strings representing the Vector Function ABI variants associated to the CallInst CI.
 
void setVectorVariantNames (CallInst *CI, ArrayRef< std::string > VariantMappings)
 Overwrite the Vector Function ABI variants attribute with the names provide in VariantMappings.
 

Variables

static constexpr char const_LLVM_ = "_LLVM_"
 LLVM Internal VFABI ISA token for vector functions.
 
static constexpr char const_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 constMappingsAttrName = "vector-function-abi-variant"
 

Function Documentation

◆ getVectorVariantNames()

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.

If the CI does not contain the vector-function-abi-variant attribute, we return without populating VariantMappings, i.e. callers of getVectorVariantNames need not check for the presence of the attribute (see InjectTLIMappings).

Definition at line 1416 of file VectorUtils.cpp.

References assert(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::dbgs(), llvm::StringRef::empty(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::CallBase::getFnAttr(), llvm::Module::getFunction(), llvm::Instruction::getModule(), llvm::Attribute::getValueAsString(), Info, LLVM_DEBUG, MappingsAttrName, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::StringRef::split(), and tryDemangleForVFABI().

Referenced by addMappingsFromTLI().

◆ getVFParamKindFromString()

VFParamKind llvm::VFABI::getVFParamKindFromString ( const StringRef  Token)

Retrieve the VFParamKind from a string token.

Definition at line 458 of file VFABIDemangling.cpp.

References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), and llvm_unreachable.

◆ mangleTLIVectorName()

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.

It is the responsibility of the caller to make sure that this is only used if all parameters in the vector function are vector type. This returned string holds scalar-to-vector mapping: ZGV<isa><mask><vlen><vparams><scalarname>(<vectorname>)

where:

<isa> = "_LLVM_" <mask> = "M" if masked, "N" if no mask. <vlen> = Number of concurrent lanes, stored in the VectorizationFactor field of the VecDesc struct. If the number of lanes is scalable then 'x' is printed instead. <vparams> = "v", as many as are the numArgs. <scalarname> = the name of the scalar function. <vectorname> = the name of the vector function.

Definition at line 1400 of file VectorUtils.cpp.

References _LLVM_, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), I, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), and llvm::raw_svector_ostream::str().

Referenced by addMappingsFromTLI().

◆ setVectorVariantNames()

void llvm::VFABI::setVectorVariantNames ( CallInst CI,
ArrayRef< std::string >  VariantMappings 
)

◆ tryDemangleForVFABI()

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:

<VFABI_name>{(<redirection>)}

where <VFABI_name> is the name of the vector function, mangled according to the rules described in the Vector Function ABI of the target vector extension (or <isa> from now on). The <VFABI_name> is in the following format:

ZGV<isa><mask><vlen><parameters><scalarname>[(<redirection>)]

This methods support demangling rules for the following <isa>:

Parameters
MangledName-> input string in the format ZGV<isa><mask><vlen><parameters><scalarname>[(<redirection>)].
M-> Module used to retrieve informations about the vector function that are not possible to retrieve from the mangled name. At the moment, this parameter is needed only to retrieve the Vectorization Factor of scalable vector functions from their respective IR declarations.

Definition at line 317 of file VFABIDemangling.cpp.

References assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::StringRef::consume_back(), llvm::StringRef::consume_front(), llvm::count_if(), llvm::SmallVectorBase< Size_T >::empty(), llvm::StringRef::empty(), F, llvm::ElementCount::get(), llvm::StringRef::ltrim(), llvm::VFParameter::ParamKind, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorBase< Size_T >::size(), and llvm::StringRef::take_while().

Referenced by getVectorVariantNames(), and setVectorVariantNames().

Variable Documentation

◆ _LLVM_

constexpr char const* llvm::VFABI::_LLVM_ = "_LLVM_"
staticconstexpr

LLVM Internal VFABI ISA token for vector functions.

Definition at line 147 of file VectorUtils.h.

Referenced by mangleTLIVectorName().

◆ _LLVM_Scalarize_

constexpr char const* llvm::VFABI::_LLVM_Scalarize_ = "_LLVM_Scalarize_"
staticconstexpr

Prefix for internal name redirection for vector function that tells the compiler to scalarize the call using the scalar name of the function.

For example, a mangled name like _ZGV_LLVM_N2v_foo(_LLVM_Scalarize_foo) would tell the vectorizer to vectorize the scalar call foo, and to scalarize it once vectorization is done.

Definition at line 154 of file VectorUtils.h.

◆ MappingsAttrName

constexpr char const* llvm::VFABI::MappingsAttrName = "vector-function-abi-variant"
staticconstexpr

Definition at line 210 of file VectorUtils.h.

Referenced by getVectorVariantNames().