forked from OSchip/llvm-project
[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:
parent
d07a789579
commit
4bc07c332a
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue