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

Functions

std::optional< VFInfotryDemangleForVFABI (StringRef MangledName, const FunctionType *FTy)
 Function to construct a VFInfo out of a mangled names in the following format:
 
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.
 
FunctionTypecreateFunctionType (const VFInfo &Info, const FunctionType *ScalarFTy)
 Constructs a FunctionType by applying vector function information to the type of a matching scalar function.
 
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

◆ createFunctionType()

FunctionType * llvm::VFABI::createFunctionType ( const VFInfo Info,
const FunctionType ScalarFTy 
)

Constructs a FunctionType by applying vector function information to the type of a matching scalar function.

Parameters
Infogets the vectorization factor (VF) and the VFParamKind of the parameters.
ScalarFTygets the Type information of parameters, as it is not stored in Info.
Returns
a pointer to a newly created vector FunctionType

Definition at line 556 of file VFABIDemangler.cpp.

References llvm::Type::getContext(), llvm::Type::getInt1Ty(), llvm::FunctionType::getParamType(), llvm::FunctionType::getReturnType(), Info, llvm::SmallVectorTemplateBase< T, bool >::push_back(), RetTy, and llvm::toVectorizedTy().

Referenced by addVariantDeclaration(), and replaceWithCallToVeclib().

◆ 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 535 of file VFABIDemangler.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::dbgs(), llvm::StringRef::empty(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::CallBase::getFnAttr(), llvm::Module::getFunction(), llvm::CallBase::getFunctionType(), 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 512 of file VFABIDemangler.cpp.

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

◆ setVectorVariantNames()

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

◆ tryDemangleForVFABI()

std::optional< VFInfo > llvm::VFABI::tryDemangleForVFABI ( StringRef  MangledName,
const FunctionType FTy 
)

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>)].
FTy-> FunctionType of the scalar function which we're trying to find a vectorized variant for. This is required to determine the vectorization factor for scalable vectors, since the mangled name doesn't encode that; it needs to be derived from the widest element types of vector arguments or return values.

Definition at line 379 of file VFABIDemangler.cpp.

References assert(), llvm::StringRef::consume_back(), llvm::StringRef::consume_front(), llvm::count_if(), llvm::StringRef::empty(), llvm::ElementCount::getFixed(), llvm::FunctionType::getNumParams(), llvm::StringRef::ltrim(), llvm::VFParameter::ParamKind, and llvm::StringRef::take_while().

Referenced by addVariantDeclaration(), getVectorVariantNames(), replaceWithCallToVeclib(), and setVectorVariantNames().

Variable Documentation

◆ _LLVM_

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

LLVM Internal VFABI ISA token for vector functions.

Definition at line 148 of file VFABIDemangler.h.

◆ _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 155 of file VFABIDemangler.h.

◆ MappingsAttrName

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

Definition at line 190 of file VFABIDemangler.h.

Referenced by getVectorVariantNames().