diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -1841,6 +1841,72 @@ function has not changed between the function prolog and eiplog. It is currently x86_64-specific. +Call Site Attributes +---------------------- + +The following call site attributes are supported. + +``vector-function-abi-variants`` + This attribute can be attached to a CallInst to list the vector + functions that can be used to vectorize calls to the scalar + function. The Attribute consists of a comma separated list of + mangled names. The syntax for the mangled names is as follows: + + _ZGV_{()} + + When present, the attribute informs the compiler that the function + ```` has a corresponding vector variant that can be + used to perform the concurrent invocation of ```` on + vectors. The shape of the vector function is described by the + tokens between the prefix ``_ZGV`` and the ```` + token. The standard name of the vector function is + ``_ZGV_``. When present, + the optional token ``()`` informs the compiler + that a custom name is provided instead of the standard one + ``_ZGV_`` (custom names + can be provided for example via the use of ``declare variant`` in + OpenMP 5.0). The declaration of the variant must be present in the + IR Module. The signature of the vector variant is determined by + the rules of the Vector Function ABI (VFABI) specifications of the + target. For Arm and X86, the VFABI can be found at + https://github.com/ARM-software/software-standards and + https://software.intel.com/en-us/articles/vector-simd-function-abi, + respectively. + + For X86 and Arm targets, the values of the tokens in the standard + name are those that are defined in the VFABI. LLVM has an internal + ```` token that can be used to create scalar-to-vector + mappings for functions that are not directly associated to any + of the target ISAs (for example, some of the mappings stored in + the TargetLibraryInfo). Valid values for the ```` token are: + + := b | c | d | e -> X86 SSE, AVX, AVX2, AVX512 + | n | s -> Armv8 Advanced SIMD, SVE + | __LLVM__ -> Internal LLVM Vector ISA + + For all targets currently supported (x86, Arm and Internal LLVM), + the remaining tokens can have the following values: + + := M | N -> mask | no mask + + := number -> number of lanes + | x -> VLA (Vector Length Agnostic) + + := v -> vector + | l | l -> linear + | R | R -> linear with ref modifier + | L | L -> linear with val modifier + | U | U -> linear with uval modifier + | ls -> runtime linear + | Rs -> runtime linear with ref modifier + | Ls -> runtime linear with val modifier + | Us -> runtime linear with uval modifier + | u -> uniform + + := name of the scalar function + + := optional, custom name of the vector function + .. _glattrs: Global Attributes