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,69 @@ function has not changed between the function prolog and eiplog. It is currently x86_64-specific. +Instruction Attributes +---------------------- + +Attributes may be attached to instrucions. The following instruction +attributes are supported. + +``vector-function-abi-variants`` + This attribute can be attached to a CallInst to list the vector + function 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 correspondent 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 ``()`` informs the compiler that + a custom name is provided instead of the standard one + ``_ZGV_``. The + definition or 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. The same tokens of + X86 and Arm are used to represent the Internal LLVM Vector Isa + when `` = __LLVM__``. + + The tokens are expand as follows: + + := b | c | d | e -> X86 SSE, AVX, AVX2, AVX512 + | n | s -> Armv8 Advanced SIMD, SVE + | __LLVM__ -> Internal LLVM Vector ISA + + := 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