mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[LangRef] Add integer min/max/abs intrinsics
Add LangRef specification for the llvm.abs, llvm.umin, llvm.umax, llvm.smin, and llvm.smax integer intrinsics. Link to RFC: https://lists.llvm.org/pipermail/llvm-dev/2020-June/142257.html Proposed alive2 implementation: https://github.com/AliveToolkit/alive2/pull/353 Differential Revision: https://reviews.llvm.org/D81829
This commit is contained in:
parent
904b2334bd
commit
39bcc4be1d
164
docs/LangRef.rst
164
docs/LangRef.rst
@ -12258,14 +12258,172 @@ Example:
|
||||
call void @llvm.call.preallocated.teardown(token %cs)
|
||||
ret void
|
||||
|
||||
Standard C Library Intrinsics
|
||||
-----------------------------
|
||||
Standard C/C++ Library Intrinsics
|
||||
---------------------------------
|
||||
|
||||
LLVM provides intrinsics for a few important standard C library
|
||||
LLVM provides intrinsics for a few important standard C/C++ library
|
||||
functions. These intrinsics allow source-language front-ends to pass
|
||||
information about the alignment of the pointer arguments to the code
|
||||
generator, providing opportunity for more efficient code generation.
|
||||
|
||||
|
||||
'``llvm.abs.*``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
This is an overloaded intrinsic. You can use ``llvm.abs`` on any
|
||||
integer bit width or any vector of integer elements.
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.abs.i32(i32 <src>, i1 <is_int_min_poison>)
|
||||
declare <4 x i32> @llvm.abs.v4i32(<4 x i32> <src>, i1 <is_int_min_poison>)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
The '``llvm.abs``' family of intrinsic functions returns the absolute value
|
||||
of an argument.
|
||||
|
||||
Arguments:
|
||||
""""""""""
|
||||
|
||||
The first argument is the value for which the absolute value is to be returned.
|
||||
This argument may be of any integer type or a vector with integer element type.
|
||||
The return type must match the first argument type.
|
||||
|
||||
The second argument must be a constant and is a flag to indicate whether the
|
||||
result value of the '``llvm.abs``' intrinsic is a
|
||||
:ref:`poison value <poisonvalues>` if the argument is statically or dynamically
|
||||
an ``INT_MIN`` value.
|
||||
|
||||
Semantics:
|
||||
""""""""""
|
||||
|
||||
The '``llvm.abs``' intrinsic returns the magnitude (always positive) of the
|
||||
argument or each element of a vector argument.". If the argument is ``INT_MIN``,
|
||||
then the result is also ``INT_MIN`` if ``is_int_min_poison == 0`` and
|
||||
``poison`` otherwise.
|
||||
|
||||
|
||||
'``llvm.smax.*``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
This is an overloaded intrinsic. You can use ``@llvm.smax`` on any
|
||||
integer bit width or any vector of integer elements.
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.smax.i32(i32 %a, i32 %b)
|
||||
declare <4 x i32> @llvm.smax.v4i32(<4 x i32> %a, <4 x i32> %b)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
Return the larger of ``%a`` and ``%b`` comparing the values as signed integers.
|
||||
Vector intrinsics operate on a per-element basis. The larger element of ``%a``
|
||||
and ``%b`` at a given index is returned for that index.
|
||||
|
||||
Arguments:
|
||||
""""""""""
|
||||
|
||||
The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
|
||||
integer element type. The argument types must match each other, and the return
|
||||
type must match the argument type.
|
||||
|
||||
|
||||
'``llvm.smin.*``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
This is an overloaded intrinsic. You can use ``@llvm.smin`` on any
|
||||
integer bit width or any vector of integer elements.
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.smin.i32(i32 %a, i32 %b)
|
||||
declare <4 x i32> @llvm.smin.v4i32(<4 x i32> %a, <4 x i32> %b)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
Return the smaller of ``%a`` and ``%b`` comparing the values as signed integers.
|
||||
Vector intrinsics operate on a per-element basis. The smaller element of ``%a``
|
||||
and ``%b`` at a given index is returned for that index.
|
||||
|
||||
Arguments:
|
||||
""""""""""
|
||||
|
||||
The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
|
||||
integer element type. The argument types must match each other, and the return
|
||||
type must match the argument type.
|
||||
|
||||
|
||||
'``llvm.umax.*``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
This is an overloaded intrinsic. You can use ``@llvm.umax`` on any
|
||||
integer bit width or any vector of integer elements.
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.umax.i32(i32 %a, i32 %b)
|
||||
declare <4 x i32> @llvm.umax.v4i32(<4 x i32> %a, <4 x i32> %b)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
Return the larger of ``%a`` and ``%b`` comparing the values as unsigned
|
||||
integers. Vector intrinsics operate on a per-element basis. The larger element
|
||||
of ``%a`` and ``%b`` at a given index is returned for that index.
|
||||
|
||||
Arguments:
|
||||
""""""""""
|
||||
|
||||
The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
|
||||
integer element type. The argument types must match each other, and the return
|
||||
type must match the argument type.
|
||||
|
||||
|
||||
'``llvm.umin.*``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
This is an overloaded intrinsic. You can use ``@llvm.umin`` on any
|
||||
integer bit width or any vector of integer elements.
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.umin.i32(i32 %a, i32 %b)
|
||||
declare <4 x i32> @llvm.umin.v4i32(<4 x i32> %a, <4 x i32> %b)
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
Return the smaller of ``%a`` and ``%b`` comparing the values as unsigned
|
||||
integers. Vector intrinsics operate on a per-element basis. The smaller element
|
||||
of ``%a`` and ``%b`` at a given index is returned for that index.
|
||||
|
||||
Arguments:
|
||||
""""""""""
|
||||
|
||||
The arguments (``%a`` and ``%b``) may be of any integer type or a vector with
|
||||
integer element type. The argument types must match each other, and the return
|
||||
type must match the argument type.
|
||||
|
||||
|
||||
.. _int_memcpy:
|
||||
|
||||
'``llvm.memcpy``' Intrinsic
|
||||
|
Loading…
Reference in New Issue
Block a user