forked from OSchip/llvm-project
[FPEnv] Small fixes to implementation of flt.rounds
This change makes minor correction to the implementation of intrinsic `llvm.flt.rounds`: - Added documentation entry in LangRef, - Attributes of the intrinsic changed to be in line with other functions dependent of floating-point environment. Differential Revision: https://reviews.llvm.org/D79322
This commit is contained in:
parent
e6e89875b0
commit
61f72dd8ac
|
@ -323,6 +323,9 @@ BUILTIN(__builtin_truncf, "ff", "Fnc")
|
|||
BUILTIN(__builtin_truncl, "LdLd", "Fnc")
|
||||
BUILTIN(__builtin_truncf16, "hh", "Fnc")
|
||||
|
||||
// Access to floating point environment
|
||||
BUILTIN(__builtin_flt_rounds, "i", "n")
|
||||
|
||||
// C99 complex builtins
|
||||
BUILTIN(__builtin_cabs, "dXd", "Fne")
|
||||
BUILTIN(__builtin_cabsf, "fXf", "Fne")
|
||||
|
@ -517,7 +520,6 @@ BUILTIN(__builtin_return_address, "v*IUi", "n")
|
|||
BUILTIN(__builtin_extract_return_addr, "v*v*", "n")
|
||||
BUILTIN(__builtin_frame_address, "v*IUi", "n")
|
||||
BUILTIN(__builtin___clear_cache, "vc*c*", "n")
|
||||
BUILTIN(__builtin_flt_rounds, "i", "nc")
|
||||
BUILTIN(__builtin_setjmp, "iv**", "j")
|
||||
BUILTIN(__builtin_longjmp, "vv**i", "r")
|
||||
BUILTIN(__builtin_unwind_init, "v", "")
|
||||
|
|
|
@ -18284,6 +18284,46 @@ This function returns the same values as the libm ``trunc`` functions
|
|||
would and handles error conditions in the same way.
|
||||
|
||||
|
||||
Floating Point Environment Manipulation intrinsics
|
||||
--------------------------------------------------
|
||||
|
||||
These functions read or write floating point environment, such as rounding
|
||||
mode or state of floating point exceptions. Altering the floating point
|
||||
environment requires special care. See :ref:`Floating Point Environment <floatenv>`.
|
||||
|
||||
'``llvm.flt.rounds``' Intrinsic
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Syntax:
|
||||
"""""""
|
||||
|
||||
::
|
||||
|
||||
declare i32 @llvm.flt.rounds()
|
||||
|
||||
Overview:
|
||||
"""""""""
|
||||
|
||||
The '``llvm.flt.rounds``' intrinsic reads the current rounding mode.
|
||||
|
||||
Semantics:
|
||||
""""""""""
|
||||
|
||||
The '``llvm.flt.rounds``' intrinsic returns the current rounding mode.
|
||||
Encoding of the returned values is same as the result of ``FLT_ROUNDS``,
|
||||
specified by C standard:
|
||||
|
||||
::
|
||||
|
||||
0 - toward zero
|
||||
1 - to nearest, ties to even
|
||||
2 - toward positive infinity
|
||||
3 - toward negative infinity
|
||||
4 - to nearest, ties away from zero
|
||||
|
||||
Other values may be used to represent additional rounding modes, supported by a
|
||||
target. These values are target-specific.
|
||||
|
||||
General Intrinsics
|
||||
------------------
|
||||
|
||||
|
|
|
@ -612,6 +612,13 @@ def int_objectsize : Intrinsic<[llvm_anyint_ty],
|
|||
[IntrNoMem, IntrSpeculatable, IntrWillReturn, ImmArg<1>, ImmArg<2>, ImmArg<3>]>,
|
||||
GCCBuiltin<"__builtin_object_size">;
|
||||
|
||||
//===--------------- Access to Floating Point Environment -----------------===//
|
||||
//
|
||||
|
||||
let IntrProperties = [IntrInaccessibleMemOnly, IntrWillReturn] in {
|
||||
def int_flt_rounds : Intrinsic<[llvm_i32_ty], []>;
|
||||
}
|
||||
|
||||
//===--------------- Constrained Floating Point Intrinsics ----------------===//
|
||||
//
|
||||
|
||||
|
@ -1115,8 +1122,6 @@ def int_coro_subfn_addr : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i8_ty],
|
|||
|
||||
///===-------------------------- Other Intrinsics --------------------------===//
|
||||
//
|
||||
def int_flt_rounds : Intrinsic<[llvm_i32_ty]>,
|
||||
GCCBuiltin<"__builtin_flt_rounds">;
|
||||
def int_trap : Intrinsic<[], [], [IntrNoReturn, IntrCold]>,
|
||||
GCCBuiltin<"__builtin_trap">;
|
||||
def int_debugtrap : Intrinsic<[]>,
|
||||
|
|
Loading…
Reference in New Issue