[llvm][docs] LangRef for IR attribute `vector-function-abi-variant`.

Reviewers: jdoerfert, andwar, simoll, rengolin, hfinkel, xtian

Reviewed By: jdoerfert

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D72798
This commit is contained in:
Francesco Petrogalli 2020-01-15 19:50:44 +00:00
parent d07a789579
commit 4bc07c332a
1 changed files with 71 additions and 0 deletions

View File

@ -1865,6 +1865,77 @@ example:
function has not changed between the function prolog and eiplog. It is
currently x86_64-specific.
Call Site Attributes
----------------------
In addition to function attributes the following call site only
attributes are supported:
``vector-function-abi-variant``
This attribute can be attached to a :ref:`call <i_call>` to list
the vector functions associated to the function. Notice that the
attribute cannot be attached to a :ref:`invoke <i_invoke>` or a
:ref:`callbr <i_callbr>` instruction. The attribute consists of a
comma separated list of mangled names. The order of the list does
not imply preference (it is logically a set). The compiler is free
to pick any listed vector function of its choosing.
The syntax for the mangled names is as follows:
_ZGV<isa><mask><vlen><parameters>_<scalar_name>[(<vector_redirection>)]
When present, the attribute informs the compiler that the function
``<scalar_name>`` has a corresponding vector variant that can be
used to perform the concurrent invocation of ``<scalar_name>`` on
vectors. The shape of the vector function is described by the
tokens between the prefix ``_ZGV`` and the ``<scalar_name>``
token. The standard name of the vector function is
``_ZGV<isa><mask><vlen><parameters>_<scalar_name>``. When present,
the optional token ``(<vector_redirection>)`` informs the compiler
that a custom name is provided in addition to the standard one
(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
``<isa>`` 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 ``<isa>`` token are:
<isa>:= 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:
<mask>:= M | N -> mask | no mask
<vlen>:= number -> number of lanes
| x -> VLA (Vector Length Agnostic)
<parameters>:= v -> vector
| l | l <number> -> linear
| R | R <number> -> linear with ref modifier
| L | L <number> -> linear with val modifier
| U | U <number> -> linear with uval modifier
| ls <pos> -> runtime linear
| Rs <pos> -> runtime linear with ref modifier
| Ls <pos> -> runtime linear with val modifier
| Us <pos> -> runtime linear with uval modifier
| u -> uniform
<scalar_name>:= name of the scalar function
<vector_redirection>:= optional, custom name of the vector function
.. _glattrs:
Global Attributes