@c Copyright (C) 1988-2026 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@node Internal Functions
@chapter Internal Functions in GENERIC and GIMPLE
@cindex internal functions
@cindex @file{internal-fn.def}

In addition to builtin functions specified in @file{builtins.def} and
friends, the GENERIC and GIMPLE intermediate languages use calls with
pre-defined semantics that are inline expanded to RTL rather than to
calls or lowered at some point during optimization.

Internal functions work like tree operation codes in that they are
not strongly typed so there are no variants like @code{BUILT_IN_SIN}
and @code{BUILT_IN_SINF}; just a single @code{IFN_SIN}.

Internal functions are declared in @file{internal-fn.def}.

@menu
* Internal Function API:: How to operate on internal functions.
* Table of Internal Functions::
@end menu

@node Internal Function API
@section Internal Function API

Internal functions and builtin functions can be operated on
transparently via the @code{combined_fn} enumeration type and
the following set of helper functions.

FIXME: not documented yet.

The following are internal function specific helpers working
on the @code{internal_fn} enumeration type.

FIXME: not documented yet.

@node Table of Internal Functions
@section Table of Internal Functions

@menu
* Direct Internal Functions::
* Internal Functions Corresponding to Builtins::
* Other Internal Functions::
@end menu

@node Direct Internal Functions
@subsection Direct Internal Functions

@table @asis

@cindex @code{IFN_CRC} internal function
@item @samp{IFN_CRC}
The @code{IFN_CRC} internal function directly maps to the @code{crc}
instruction pattern.

@cindex @code{IFN_CRC_REV} internal function
@item @samp{IFN_CRC_REV}
The @code{IFN_CRC_REV} internal function directly maps to the @code{crc_rev}
instruction pattern.

@cindex @code{IFN_MASK_LOAD} internal function
@item @samp{IFN_MASK_LOAD}
The @code{IFN_MASK_LOAD} internal function maps directly to the
@code{maskload} instruction pattern (@pxref{maskload@var{m}@var{n}}).
For a vector type @code{v} (with @code{TYPE_MODE} @var{m}), a mask type
@code{p} (with @code{TYPE_MODE} @var{n}), and pointer type
@code{aliasptr}, the signature of the internal function is:
@smallexample
v IFN_MASK_LOAD (v *addr, aliasptr cookie, p mask, v elseval)
@end smallexample
a call to this internal function with lhs @var{r} maps to
@code{maskload@var{m}@var{n}} with the following operands array:
@code{[@var{r}, addr, mask, elseval]}.  @code{cookie}'s type
(@code{aliasptr}) is a pointer type used for type-based alias analysis,
and its value gives the alignment of the load in bits.

@cindex @code{IFN_LOAD_LANES} internal function
@item @samp{IFN_LOAD_LANES}
The @code{IFN_LOAD_LANES} internal function directly maps to the
@code{vec_load_lanes} instruction pattern.

@cindex @code{IFN_MASK_LOAD_LANES} internal function
@item @samp{IFN_MASK_LOAD_LANES}
The @code{IFN_MASK_LOAD_LANES} internal function directly maps to the
@code{vec_mask_load_lanes} instruction pattern.

@cindex @code{IFN_MASK_LEN_LOAD_LANES} internal function
@item @samp{IFN_MASK_LEN_LOAD_LANES}
The @code{IFN_MASK_LEN_LOAD_LANES} internal function directly maps to the
@code{vec_mask_len_load_lanes} instruction pattern.

@cindex @code{IFN_GATHER_LOAD} internal function
@item @samp{IFN_GATHER_LOAD}
The @code{IFN_GATHER_LOAD} internal function directly maps to the
@code{gather_load} instruction pattern.

@cindex @code{IFN_MASK_GATHER_LOAD} internal function
@item @samp{IFN_MASK_GATHER_LOAD}
The @code{IFN_MASK_GATHER_LOAD} internal function directly maps to the
@code{mask_gather_load} instruction pattern.

@cindex @code{IFN_MASK_LEN_GATHER_LOAD} internal function
@item @samp{IFN_MASK_LEN_GATHER_LOAD}
The @code{IFN_MASK_LEN_GATHER_LOAD} internal function directly maps to the
@code{mask_len_gather_load} instruction pattern.

@cindex @code{IFN_MASK_LEN_STRIDED_LOAD} internal function
@item @samp{IFN_MASK_LEN_STRIDED_LOAD}
The @code{IFN_MASK_LEN_STRIDED_LOAD} internal function directly maps to the
@code{mask_len_strided_load} instruction pattern.

@cindex @code{IFN_LEN_LOAD} internal function
@item @samp{IFN_LEN_LOAD}
The @code{IFN_LEN_LOAD} internal function directly maps to the @code{len_load}
instruction pattern.

@cindex @code{IFN_MASK_LEN_LOAD} internal function
@item @samp{IFN_MASK_LEN_LOAD}
The @code{IFN_MASK_LEN_LOAD} internal function directly maps to the
@code{mask_len_load} instruction pattern.

@cindex @code{IFN_SCATTER_STORE} internal function
@item @samp{IFN_SCATTER_STORE}
The @code{IFN_SCATTER_STORE} internal function directly maps to the
@code{scatter_store} instruction pattern.

@cindex @code{IFN_MASK_SCATTER_STORE} internal function
@item @samp{IFN_MASK_SCATTER_STORE}
The @code{IFN_MASK_SCATTER_STORE} internal function directly maps to the
@code{mask_scatter_store} instruction pattern.

@cindex @code{IFN_MASK_LEN_SCATTER_STORE} internal function
@item @samp{IFN_MASK_LEN_SCATTER_STORE}
The @code{IFN_MASK_LEN_SCATTER_STORE} internal function directly maps to the
@code{mask_len_scatter_store} instruction pattern.

@cindex @code{IFN_MASK_LEN_STRIDED_STORE} internal function
@item @samp{IFN_MASK_LEN_STRIDED_STORE}
The @code{IFN_MASK_LEN_STRIDED_STORE} internal function directly maps to the
@code{mask_len_strided_store} instruction pattern.

@cindex @code{IFN_MASK_STORE} internal function
@item @samp{IFN_MASK_STORE}
The @code{IFN_MASK_STORE} internal function directly maps to the
@code{maskstore} instruction pattern.

@cindex @code{IFN_STORE_LANES} internal function
@item @samp{IFN_STORE_LANES}
The @code{IFN_STORE_LANES} internal function directly maps to the
@code{vec_store_lanes} instruction pattern.

@cindex @code{IFN_MASK_STORE_LANES} internal function
@item @samp{IFN_MASK_STORE_LANES}
The @code{IFN_MASK_STORE_LANES} internal function directly maps to the
@code{vec_mask_store_lanes} instruction pattern.

@cindex @code{IFN_MASK_LEN_STORE_LANES} internal function
@item @samp{IFN_MASK_LEN_STORE_LANES}
The @code{IFN_MASK_LEN_STORE_LANES} internal function directly maps to the
@code{vec_mask_len_store_lanes} instruction pattern.

@cindex @code{IFN_VCOND_MASK} internal function
@item @samp{IFN_VCOND_MASK}
The @code{IFN_VCOND_MASK} internal function directly maps to the
@code{vcond_mask} instruction pattern.

@cindex @code{IFN_VCOND_MASK_LEN} internal function
@item @samp{IFN_VCOND_MASK_LEN}
The @code{IFN_VCOND_MASK_LEN} internal function directly maps to the
@code{vcond_mask_len} instruction pattern.

@cindex @code{IFN_VEC_SET} internal function
@item @samp{IFN_VEC_SET}
The @code{IFN_VEC_SET} internal function directly maps to the @code{vec_set}
instruction pattern.

@cindex @code{IFN_VEC_EXTRACT} internal function
@item @samp{IFN_VEC_EXTRACT}
The @code{IFN_VEC_EXTRACT} internal function directly maps to the
@code{vec_extract} instruction pattern.

@cindex @code{IFN_LEN_STORE} internal function
@item @samp{IFN_LEN_STORE}
The @code{IFN_LEN_STORE} internal function directly maps to the
@code{len_store} instruction pattern.

@cindex @code{IFN_MASK_LEN_STORE} internal function
@item @samp{IFN_MASK_LEN_STORE}
The @code{IFN_MASK_LEN_STORE} internal function directly maps to the
@code{mask_len_store} instruction pattern.

@cindex @code{IFN_WHILE_ULT} internal function
@item @samp{IFN_WHILE_ULT}
The @code{IFN_WHILE_ULT} internal function directly maps to the
@code{while_ult} instruction pattern.

@cindex @code{IFN_SELECT_VL} internal function
@item @samp{IFN_SELECT_VL}
The @code{IFN_SELECT_VL} internal function directly maps to the
@code{select_vl} instruction pattern.

@cindex @code{IFN_CHECK_RAW_PTRS} internal function
@item @samp{IFN_CHECK_RAW_PTRS}
The @code{IFN_CHECK_RAW_PTRS} internal function directly maps to the
@code{check_raw_ptrs} instruction pattern.

@cindex @code{IFN_CHECK_WAR_PTRS} internal function
@item @samp{IFN_CHECK_WAR_PTRS}
The @code{IFN_CHECK_WAR_PTRS} internal function directly maps to the
@code{check_war_ptrs} instruction pattern.

@cindex @code{IFN_VEC_SHL_INSERT} internal function
@item @samp{IFN_VEC_SHL_INSERT}
The @code{IFN_VEC_SHL_INSERT} internal function directly maps to the
@code{vec_shl_insert} instruction pattern.

@cindex @code{IFN_DIV_POW2} internal function
@item @samp{IFN_DIV_POW2}
The @code{IFN_DIV_POW2} internal function directly maps to the @code{sdiv_pow2}
instruction pattern.

@cindex @code{IFN_FMS} internal function
@item @samp{IFN_FMS}
The @code{IFN_FMS} internal function directly maps to the @code{fms}
instruction pattern.

@cindex @code{IFN_FNMA} internal function
@item @samp{IFN_FNMA}
The @code{IFN_FNMA} internal function directly maps to the @code{fnma}
instruction pattern.

@cindex @code{IFN_FNMS} internal function
@item @samp{IFN_FNMS}
The @code{IFN_FNMS} internal function directly maps to the @code{fnms}
instruction pattern.

@cindex @code{IFN_COND_SQRT} internal function
@item @samp{IFN_COND_SQRT}
The @code{IFN_COND_SQRT} internal function directly maps to the
@code{cond_sqrt} instruction pattern.

@cindex @code{IFN_COND_LEN_SQRT} internal function
@item @samp{IFN_COND_LEN_SQRT}
The @code{IFN_COND_LEN_SQRT} internal function directly maps to the
@code{cond_len_sqrt} instruction pattern.

@cindex @code{IFN_COND_CEIL} internal function
@item @samp{IFN_COND_CEIL}
The @code{IFN_COND_CEIL} internal function directly maps to the
@code{cond_ceil} instruction pattern.

@cindex @code{IFN_COND_LEN_CEIL} internal function
@item @samp{IFN_COND_LEN_CEIL}
The @code{IFN_COND_LEN_CEIL} internal function directly maps to the
@code{cond_len_ceil} instruction pattern.

@cindex @code{IFN_COND_FLOOR} internal function
@item @samp{IFN_COND_FLOOR}
The @code{IFN_COND_FLOOR} internal function directly maps to the
@code{cond_floor} instruction pattern.

@cindex @code{IFN_COND_LEN_FLOOR} internal function
@item @samp{IFN_COND_LEN_FLOOR}
The @code{IFN_COND_LEN_FLOOR} internal function directly maps to the
@code{cond_len_floor} instruction pattern.

@cindex @code{IFN_COND_ROUND} internal function
@item @samp{IFN_COND_ROUND}
The @code{IFN_COND_ROUND} internal function directly maps to the
@code{cond_round} instruction pattern.

@cindex @code{IFN_COND_LEN_ROUND} internal function
@item @samp{IFN_COND_LEN_ROUND}
The @code{IFN_COND_LEN_ROUND} internal function directly maps to the
@code{cond_len_round} instruction pattern.

@cindex @code{IFN_COND_RINT} internal function
@item @samp{IFN_COND_RINT}
The @code{IFN_COND_RINT} internal function directly maps to the
@code{cond_rint} instruction pattern.

@cindex @code{IFN_COND_LEN_RINT} internal function
@item @samp{IFN_COND_LEN_RINT}
The @code{IFN_COND_LEN_RINT} internal function directly maps to the
@code{cond_len_rint} instruction pattern.

@cindex @code{IFN_COND_ADD} internal function
@item @samp{IFN_COND_ADD}
The @code{IFN_COND_ADD} internal function directly maps to the
@code{cond_add} instruction pattern.

@cindex @code{IFN_COND_LEN_ADD} internal function
@item @samp{IFN_COND_LEN_ADD}
The @code{IFN_COND_LEN_ADD} internal function directly maps to the
@code{cond_len_add} instruction pattern.

@cindex @code{IFN_COND_SUB} internal function
@item @samp{IFN_COND_SUB}
The @code{IFN_COND_SUB} internal function directly maps to the
@code{cond_sub} instruction pattern.

@cindex @code{IFN_COND_LEN_SUB} internal function
@item @samp{IFN_COND_LEN_SUB}
The @code{IFN_COND_LEN_SUB} internal function directly maps to the
@code{cond_len_sub} instruction pattern.

@cindex @code{IFN_COND_MUL} internal function
@item @samp{IFN_COND_MUL}
The @code{IFN_COND_MUL} internal function directly maps to the
@code{cond_smul} instruction pattern.

@cindex @code{IFN_COND_LEN_MUL} internal function
@item @samp{IFN_COND_LEN_MUL}
The @code{IFN_COND_LEN_MUL} internal function directly maps to the
@code{cond_len_smul} instruction pattern.

@cindex @code{IFN_COND_RDIV} internal function
@item @samp{IFN_COND_RDIV}
The @code{IFN_COND_RDIV} internal function directly maps to the
@code{cond_sdiv} instruction pattern.

@cindex @code{IFN_COND_LEN_RDIV} internal function
@item @samp{IFN_COND_LEN_RDIV}
The @code{IFN_COND_LEN_RDIV} internal function directly maps to the
@code{cond_len_sdiv} instruction pattern.

@cindex @code{IFN_COND_COPYSIGN} internal function
@item @samp{IFN_COND_COPYSIGN}
The @code{IFN_COND_COPYSIGN} internal function directly maps to the
@code{cond_copysign} instruction pattern.

@cindex @code{IFN_COND_LEN_COPYSIGN} internal function
@item @samp{IFN_COND_LEN_COPYSIGN}
The @code{IFN_COND_LEN_COPYSIGN} internal function directly maps to the
@code{cond_len_copysign} instruction pattern.

@cindex @code{IFN_COND_FMIN} internal function
@item @samp{IFN_COND_FMIN}
The @code{IFN_COND_FMIN} internal function directly maps to the
@code{cond_fmin} instruction pattern.

@cindex @code{IFN_COND_LEN_FMIN} internal function
@item @samp{IFN_COND_LEN_FMIN}
The @code{IFN_COND_LEN_FMIN} internal function directly maps to the
@code{cond_len_fmin} instruction pattern.

@cindex @code{IFN_COND_FMAX} internal function
@item @samp{IFN_COND_FMAX}
The @code{IFN_COND_FMAX} internal function directly maps to the
@code{cond_fmax} instruction pattern.

@cindex @code{IFN_COND_LEN_FMAX} internal function
@item @samp{IFN_COND_LEN_FMAX}
The @code{IFN_COND_LEN_FMAX} internal function directly maps to the
@code{cond_len_fmax} instruction pattern.

@cindex @code{IFN_COND_AND} internal function
@item @samp{IFN_COND_AND}
The @code{IFN_COND_AND} internal function directly maps to the
@code{cond_and} instruction pattern.

@cindex @code{IFN_COND_LEN_AND} internal function
@item @samp{IFN_COND_LEN_AND}
The @code{IFN_COND_LEN_AND} internal function directly maps to the
@code{cond_len_and} instruction pattern.

@cindex @code{IFN_COND_IOR} internal function
@item @samp{IFN_COND_IOR}
The @code{IFN_COND_IOR} internal function directly maps to the
@code{cond_ior} instruction pattern.

@cindex @code{IFN_COND_LEN_IOR} internal function
@item @samp{IFN_COND_LEN_IOR}
The @code{IFN_COND_LEN_IOR} internal function directly maps to the
@code{cond_len_ior} instruction pattern.

@cindex @code{IFN_COND_XOR} internal function
@item @samp{IFN_COND_XOR}
The @code{IFN_COND_XOR} internal function directly maps to the
@code{cond_xor} instruction pattern.

@cindex @code{IFN_COND_LEN_XOR} internal function
@item @samp{IFN_COND_LEN_XOR}
The @code{IFN_COND_LEN_XOR} internal function directly maps to the
@code{cond_len_xor} instruction pattern.

@cindex @code{IFN_COND_SHL} internal function
@item @samp{IFN_COND_SHL}
The @code{IFN_COND_SHL} internal function directly maps to the
@code{cond_ashl} instruction pattern.

@cindex @code{IFN_COND_LEN_SHL} internal function
@item @samp{IFN_COND_LEN_SHL}
The @code{IFN_COND_LEN_SHL} internal function directly maps to the
@code{cond_len_ashl} instruction pattern.

@cindex @code{IFN_COND_FMA} internal function
@item @samp{IFN_COND_FMA}
The @code{IFN_COND_FMA} internal function directly maps to the
@code{cond_fma} instruction pattern.

@cindex @code{IFN_COND_LEN_FMA} internal function
@item @samp{IFN_COND_LEN_FMA}
The @code{IFN_COND_LEN_FMA} internal function directly maps to the
@code{cond_len_fma} instruction pattern.

@cindex @code{IFN_COND_FMS} internal function
@item @samp{IFN_COND_FMS}
The @code{IFN_COND_FMS} internal function directly maps to the
@code{cond_fms} instruction pattern.

@cindex @code{IFN_COND_LEN_FMS} internal function
@item @samp{IFN_COND_LEN_FMS}
The @code{IFN_COND_LEN_FMS} internal function directly maps to the
@code{cond_len_fms} instruction pattern.

@cindex @code{IFN_COND_FNMA} internal function
@item @samp{IFN_COND_FNMA}
The @code{IFN_COND_FNMA} internal function directly maps to the
@code{cond_fnma} instruction pattern.

@cindex @code{IFN_COND_LEN_FNMA} internal function
@item @samp{IFN_COND_LEN_FNMA}
The @code{IFN_COND_LEN_FNMA} internal function directly maps to the
@code{cond_len_fnma} instruction pattern.

@cindex @code{IFN_COND_FNMS} internal function
@item @samp{IFN_COND_FNMS}
The @code{IFN_COND_FNMS} internal function directly maps to the
@code{cond_fnms} instruction pattern.

@cindex @code{IFN_COND_LEN_FNMS} internal function
@item @samp{IFN_COND_LEN_FNMS}
The @code{IFN_COND_LEN_FNMS} internal function directly maps to the
@code{cond_len_fnms} instruction pattern.

@cindex @code{IFN_COND_NEG} internal function
@item @samp{IFN_COND_NEG}
The @code{IFN_COND_NEG} internal function directly maps to the
@code{cond_neg} instruction pattern.

@cindex @code{IFN_COND_LEN_NEG} internal function
@item @samp{IFN_COND_LEN_NEG}
The @code{IFN_COND_LEN_NEG} internal function directly maps to the
@code{cond_len_neg} instruction pattern.

@cindex @code{IFN_COND_NOT} internal function
@item @samp{IFN_COND_NOT}
The @code{IFN_COND_NOT} internal function directly maps to the
@code{cond_one_cmpl} instruction pattern.

@cindex @code{IFN_COND_LEN_NOT} internal function
@item @samp{IFN_COND_LEN_NOT}
The @code{IFN_COND_LEN_NOT} internal function directly maps to the
@code{cond_len_one_cmpl} instruction pattern.

@cindex @code{IFN_RSQRT} internal function
@item @samp{IFN_RSQRT}
The @code{IFN_RSQRT} internal function directly maps to the @code{rsqrt}
instruction pattern.

@cindex @code{IFN_REDUC_PLUS} internal function
@item @samp{IFN_REDUC_PLUS}
The @code{IFN_REDUC_PLUS} internal function directly maps to the
@code{reduc_plus_scal} instruction pattern.

@cindex @code{IFN_REDUC_FMAX} internal function
@item @samp{IFN_REDUC_FMAX}
The @code{IFN_REDUC_FMAX} internal function directly maps to the
@code{reduc_fmax_scal} instruction pattern.

@cindex @code{IFN_REDUC_FMIN} internal function
@item @samp{IFN_REDUC_FMIN}
The @code{IFN_REDUC_FMIN} internal function directly maps to the
@code{reduc_fmin_scal} instruction pattern.

@cindex @code{IFN_REDUC_AND} internal function
@item @samp{IFN_REDUC_AND}
The @code{IFN_REDUC_AND} internal function directly maps to the
@code{reduc_and_scal} instruction pattern.

@cindex @code{IFN_REDUC_IOR} internal function
@item @samp{IFN_REDUC_IOR}
The @code{IFN_REDUC_IOR} internal function directly maps to the
@code{reduc_ior_scal} instruction pattern.

@cindex @code{IFN_REDUC_XOR} internal function
@item @samp{IFN_REDUC_XOR}
The @code{IFN_REDUC_XOR} internal function directly maps to the
@code{reduc_xor_scal} instruction pattern.

@cindex @code{IFN_REDUC_SBOOL_AND} internal function
@item @samp{IFN_REDUC_SBOOL_AND}
The @code{IFN_REDUC_SBOOL_AND} internal function directly maps to the
@code{reduc_sbool_and_scal} instruction pattern.

@cindex @code{IFN_REDUC_SBOOL_IOR} internal function
@item @samp{IFN_REDUC_SBOOL_IOR}
The @code{IFN_REDUC_SBOOL_IOR} internal function directly maps to the
@code{reduc_sbool_ior_scal} instruction pattern.

@cindex @code{IFN_REDUC_SBOOL_XOR} internal function
@item @samp{IFN_REDUC_SBOOL_XOR}
The @code{IFN_REDUC_SBOOL_XOR} internal function directly maps to the
@code{reduc_sbool_xor_scal} instruction pattern.

@cindex @code{IFN_EXTRACT_LAST} internal function
@item @samp{IFN_EXTRACT_LAST}
The @code{IFN_EXTRACT_LAST} internal function directly maps to the
@code{extract_last} instruction pattern.

@cindex @code{IFN_FOLD_EXTRACT_LAST} internal function
@item @samp{IFN_FOLD_EXTRACT_LAST}
The @code{IFN_FOLD_EXTRACT_LAST} internal function directly maps to the
@code{fold_extract_last} instruction pattern.

@cindex @code{IFN_LEN_FOLD_EXTRACT_LAST} internal function
@item @samp{IFN_LEN_FOLD_EXTRACT_LAST}
The @code{IFN_LEN_FOLD_EXTRACT_LAST} internal function directly maps to the
@code{len_fold_extract_last} instruction pattern.

@cindex @code{IFN_FOLD_LEFT_PLUS} internal function
@item @samp{IFN_FOLD_LEFT_PLUS}
The @code{IFN_FOLD_LEFT_PLUS} internal function directly maps to the
@code{fold_left_plus} instruction pattern.

@cindex @code{IFN_MASK_FOLD_LEFT_PLUS} internal function
@item @samp{IFN_MASK_FOLD_LEFT_PLUS}
The @code{IFN_MASK_FOLD_LEFT_PLUS} internal function directly maps to the
@code{mask_fold_left_plus} instruction pattern.

@cindex @code{IFN_MASK_LEN_FOLD_LEFT_PLUS} internal function
@item @samp{IFN_MASK_LEN_FOLD_LEFT_PLUS}
The @code{IFN_MASK_LEN_FOLD_LEFT_PLUS} internal function directly maps to
the @code{mask_len_fold_left_plus} instruction pattern.

@cindex @code{IFN_XORSIGN} internal function
@item @samp{IFN_XORSIGN}
The @code{IFN_XORSIGN} internal function directly maps to the
@code{xorsign} instruction pattern.

@cindex @code{IFN_COMPLEX_ADD_ROT90} internal function
@item @samp{IFN_COMPLEX_ADD_ROT90}
The @code{IFN_COMPLEX_ADD_ROT90} internal function directly maps to the
@code{cadd90} instruction pattern.

@cindex @code{IFN_COMPLEX_ADD_ROT270} internal function
@item @samp{IFN_COMPLEX_ADD_ROT270}
The @code{IFN_COMPLEX_ADD_ROT270} internal function directly maps to the
@code{cadd270} instruction pattern.

@cindex @code{IFN_COMPLEX_MUL} internal function
@item @samp{IFN_COMPLEX_MUL}
The @code{IFN_COMPLEX_MUL} internal function directly maps to the
@code{cmul} instruction pattern.

@cindex @code{IFN_COMPLEX_MUL_CONJ} internal function
@item @samp{IFN_COMPLEX_MUL_CONJ}
The @code{IFN_COMPLEX_MUL_CONJ} internal function directly maps to the
@code{cmul_conj} instruction pattern.

@cindex @code{IFN_VEC_ADDSUB} internal function
@item @samp{IFN_VEC_ADDSUB}
The @code{IFN_VEC_ADDSUB} internal function directly maps to the
@code{vec_addsub} instruction pattern.

@cindex @code{IFN_VEC_TRUNC_ADD_HIGH} internal function
@item @samp{IFN_VEC_TRUNC_ADD_HIGH}
The @code{IFN_VEC_TRUNC_ADD_HIGH} internal function directly maps to the
@code{vec_trunc_add_high} instruction pattern.

@cindex @code{IFN_VEC_FMADDSUB} internal function
@item @samp{IFN_VEC_FMADDSUB}
The @code{IFN_VEC_FMADDSUB} internal function directly maps to the
@code{vec_fmaddsub} instruction pattern.

@cindex @code{IFN_VEC_FMSUBADD} internal function
@item @samp{IFN_VEC_FMSUBADD}
The @code{IFN_VEC_FMSUBADD} internal function directly maps to the
@code{vec_fmsubadd} instruction pattern.

@cindex @code{IFN_COMPLEX_FMA} internal function
@item @samp{IFN_COMPLEX_FMA}
The @code{IFN_COMPLEX_FMA} internal function directly maps to the
@code{cmla} instruction pattern.

@cindex @code{IFN_COMPLEX_FMA_CONJ} internal function
@item @samp{IFN_COMPLEX_FMA_CONJ}
The @code{IFN_COMPLEX_FMA_CONJ} internal function directly maps to the
@code{cmla_conj} instruction pattern.

@cindex @code{IFN_COMPLEX_FMS} internal function
@item @samp{IFN_COMPLEX_FMS}
The @code{IFN_COMPLEX_FMS} internal function directly maps to the
@code{cmls} instruction pattern.

@cindex @code{IFN_COMPLEX_FMS_CONJ} internal function
@item @samp{IFN_COMPLEX_FMS_CONJ}
The @code{IFN_COMPLEX_FMS_CONJ} internal function directly maps to the
@code{cmls_conj} instruction pattern.

@cindex @code{IFN_BIT_ANDN} internal function
@item @samp{IFN_BIT_ANDN}
The @code{IFN_BIT_ANDN} internal function directly maps to the @code{andn}
instruction pattern.

@cindex @code{IFN_BIT_IORN} internal function
@item @samp{IFN_BIT_IORN}
The @code{IFN_BIT_IORN} internal function directly maps to the @code{iorn}
instruction pattern.

@cindex @code{IFN_ABD} internal function
@item @samp{IFN_ABD}
The @code{IFN_ABD} internal function directly maps to the @code{sabd}
and @code{uabd} instruction patterns, depending on the sign of the
first argument.

@cindex @code{IFN_AVG_FLOOR} internal function
@item @samp{IFN_AVG_FLOOR}
The @code{IFN_AVG_FLOOR} internal function directly maps to the
@code{savg_floor} and @code{uavg_floor} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_AVG_CEIL} internal function
@item @samp{IFN_AVG_CEIL}
The @code{IFN_AVG_CEIL} internal function directly maps to the @code{savg_ceil}
and @code{uavg_ceil} instruction patterns, depending on the sign of
the first argument.

@cindex @code{IFN_MULH} internal function
@item @samp{IFN_MULH}
The @code{IFN_MULH} internal function directly maps to the @code{smul_highpart}
and @code{umul_highpart} instruction patterns, depending on the sign of the
first argument.

@cindex @code{IFN_MULHS} internal function
@item @samp{IFN_MULHS}
The @code{IFN_MULHS} internal function directly maps to the @code{smulhs}
and @code{umulhs} instruction patterns, depending on the sign of the
first argument.

@cindex @code{IFN_MULHRS} internal function
@item @samp{IFN_MULHRS}
The @code{IFN_MULHRS} internal function directly maps to the @code{smulhrs}
and @code{umulhrs} instruction patterns, depending on the sign of the
first argument.

@cindex @code{IFN_SAT_ADD} internal function
@item @samp{IFN_SAT_ADD}
The @code{IFN_SAT_ADD} internal function directly maps to the
@code{ssadd} and @code{usadd} instruction patterns, depending on the
sign of the first argument.

@cindex @code{IFN_SAT_SUB} internal function
@item @samp{IFN_SAT_SUB}
The @code{IFN_SAT_SUB} internal function directly maps to the
@code{sssub} and @code{ussub} instruction patterns, depending on the
sign of the first argument.

@cindex @code{IFN_SAT_MUL} internal function
@item @samp{IFN_SAT_MUL}
The @code{IFN_SAT_MUL} internal function directly maps to the @code{ssmul}
and @code{usmul} instruction patterns, depending on the sign of the first
argument.

@cindex @code{IFN_SAT_TRUNC} internal function
@item @samp{IFN_SAT_TRUNC}
The @code{IFN_SAT_TRUNC} internal function directly maps to the @code{sstrunc}
and @code{ustrunc} instruction patterns, depending on the sign of the first
argument.

@cindex @code{IFN_COND_DIV} internal function
@item @samp{IFN_COND_DIV}
The @code{IFN_COND_DIV} internal function directly maps to the @code{cond_sdiv}
and @code{cond_udiv} instruction patterns, depending on the sign of the first
argument.

@cindex @code{IFN_COND_LEN_DIV} internal function
@item @samp{IFN_COND_LEN_DIV}
The @code{IFN_COND_LEN_DIV} internal function directly maps to the
@code{cond_len_sdiv} and @code{cond_len_udiv} instruction patterns, depending
on the sign of the first argument.

@cindex @code{IFN_COND_MOD} internal function
@item @samp{IFN_COND_MOD}
The @code{IFN_COND_MOD} internal function directly maps to the @code{cond_smod}
and @code{cond_umod} instruction patterns, depending on the sign of the
first argument.

@cindex @code{IFN_COND_LEN_MOD} internal function
@item @samp{IFN_COND_LEN_MOD}
The @code{IFN_COND_LEN_MOD} internal function directly maps to the
@code{cond_len_smod} and @code{cond_len_umod} instruction patterns, depending
on the sign of the first argument.

@cindex @code{IFN_COND_MIN} internal function
@item @samp{IFN_COND_MIN}
The @code{IFN_COND_MIN} internal function directly maps to the @code{cond_smin}
and @code{cond_umin} instruction patterns, depending on the sign of the first
argument.

@cindex @code{IFN_COND_LEN_MIN} internal function
@item @samp{IFN_COND_LEN_MIN}
The @code{IFN_COND_LEN_MIN} internal function directly maps to the
@code{cond_len_smin} and @code{cond_len_umin} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_COND_MAX} internal function
@item @samp{IFN_COND_MAX}
The @code{IFN_COND_MAX} internal function directly maps to the
@code{cond_smax} and @code{cond_umax} instruction patterns, depending on
the sign of the first argument.

@cindex @code{IFN_COND_LEN_MAX} internal function
@item @samp{IFN_COND_LEN_MAX}
The @code{IFN_COND_LEN_MAX} internal function directly maps to the
@code{cond_len_smax} and @code{cond_len_umax} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_COND_SHR} internal function
@item @samp{IFN_COND_SHR}
The @code{IFN_COND_SHR} internal function directly maps to the
@code{cond_ashr} and @code{cond_lshr} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_COND_LEN_SHR} internal function
@item @samp{IFN_COND_LEN_SHR}
The @code{IFN_COND_LEN_SHR} internal function directly maps to the
@code{cond_len_ashr} and @code{cond_len_lshr} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_REDUC_MAX} internal function
@item @samp{IFN_REDUC_MAX}
The @code{IFN_REDUC_MAX} internal function directly maps to the
@code{reduc_smax_scal} and @code{reduc_umax_scal} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_REDUC_MIN} internal function
@item @samp{IFN_REDUC_MIN}
The @code{IFN_REDUC_MIN} internal function directly maps to the
@code{reduc_smin_scal} and @code{reduc_umin_scal} instruction patterns,
depending on the sign of the first argument.

@cindex @code{IFN_VEC_WIDEN_PLUS} internal function
@cindex @code{IFN_VEC_WIDEN_PLUS_LO} internal function
@cindex @code{IFN_VEC_WIDEN_PLUS_HI} internal function
@cindex @code{IFN_VEC_WIDEN_PLUS_EVEN} internal function
@cindex @code{IFN_VEC_WIDEN_PLUS_ODD} internal function
@item @samp{IFN_VEC_WIDEN_PLUS}
The @code{IFN_VEC_WIDEN_PLUS} set of internal functions directly map to
the @code{vec_widen_sadd} and @code{vec_widen_uadd} instruction patterns,
depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_PLUS_LO}
and @code{IFN_VEC_WIDEN_PLUS_HI} work on the low and high parts of a vector,
the @code{IFN_VEC_WIDEN_PLUS_EVEN} and @code {IFN_VEC_WIDEN_PLUS_ODD}
functions work on the even and odd elements of a vector.

@cindex @code{IFN_VEC_WIDEN_MINUS} internal function
@cindex @code{IFN_VEC_WIDEN_MINUS_LO} internal function
@cindex @code{IFN_VEC_WIDEN_MINUS_HI} internal function
@cindex @code{IFN_VEC_WIDEN_MINUS_EVEN} internal function
@cindex @code{IFN_VEC_WIDEN_MINUS_ODD} internal function
@item @samp{IFN_VEC_WIDEN_MINUS}
The @code{IFN_VEC_WIDEN_MINUS} set of internal functions directly map to the
@code{vec_widen_ssub} and @code{vec_widen_usub} instruction patterns,
depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_MINUS_LO}
and @code{IFN_VEC_WIDEN_MINUS_HI} work on the low and high parts of a vector,
the @code{IFN_VEC_WIDEN_MINUS_EVEN} and @code {IFN_VEC_WIDEN_MINUS_ODD}
functions work on the even and odd elements of a vector.

@cindex @code{IFN_VEC_WIDEN_ABD} internal function
@cindex @code{IFN_VEC_WIDEN_ABD_LO} internal function
@cindex @code{IFN_VEC_WIDEN_ABD_HI} internal function
@cindex @code{IFN_VEC_WIDEN_ABD_EVEN} internal function
@cindex @code{IFN_VEC_WIDEN_ABD_ODD} internal function
@item @samp{IFN_VEC_WIDEN_ABD}
The @code{IFN_VEC_WIDEN_ABD} set of internal functions directly map to the
@code{vec_widen_sabd} and @code{vec_widen_uabd} instruction patterns,
depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_ABD_LO}
and @code{IFN_VEC_WIDEN_ABD_HI} work on the low and high parts of a vector,
the @code{IFN_VEC_WIDEN_ABD_EVEN} and @code {IFN_VEC_WIDEN_ABD_ODD} functions
work on the even and odd elements of a vector.

@end table

@node Internal Functions Corresponding to Builtins
@subsection Internal Functions Corresponding to Builtins

These group of internal functions extend the corresponding
@code{BUILT_IN_@var{X}} builtins to a wider set of types.

@table @asis

@cindex @code{IFN_ACOS} internal function
@item @samp{IFN_ACOS}
The @code{IFN_ACOS} internal function directly maps to the @code{acos}
instruction pattern for floating-point modes.

@cindex @code{IFN_ACOSH} internal function
@item @samp{IFN_ACOSH}
The @code{IFN_ACOSH} internal function directly maps to the @code{acosh}
instruction pattern for floating-point modes.

@cindex @code{IFN_ASIN} internal function
@item @samp{IFN_ASIN}
The @code{IFN_ASIN} internal function directly maps to the @code{asin}
instruction pattern for floating-point modes.

@cindex @code{IFN_ASINH} internal function
@item @samp{IFN_ASINH}
The @code{IFN_ASINH} internal function directly maps to the @code{asinh}
instruction pattern for floating-point modes.

@cindex @code{IFN_ATAN} internal function
@item @samp{IFN_ATAN}
The @code{IFN_ATAN} internal function directly maps to the @code{atan}
instruction pattern for floating-point modes.

@cindex @code{IFN_ATANH} internal function
@item @samp{IFN_ATANH}
The @code{IFN_ATANH} internal function directly maps to the @code{atanh}
instruction pattern for floating-point modes.

@cindex @code{IFN_COS} internal function
@item @samp{IFN_COS}
The @code{IFN_COS} internal function directly maps to the @code{cos}
instruction pattern for floating-point modes.

@cindex @code{IFN_COSH} internal function
@item @samp{IFN_COSH}
The @code{IFN_COSH} internal function directly maps to the @code{cosh}
instruction pattern for floating-point modes.

@cindex @code{IFN_EXP} internal function
@item @samp{IFN_EXP}
The @code{IFN_EXP} internal function directly maps to the @code{exp}
instruction pattern for floating-point modes.

@cindex @code{IFN_EXP10} internal function
@item @samp{IFN_EXP10}
The @code{IFN_EXP10} internal function directly maps to the @code{exp10}
instruction pattern for floating-point modes.

@cindex @code{IFN_EXP2} internal function
@item @samp{IFN_EXP2}
The @code{IFN_EXP2} internal function directly maps to the @code{exp2}
instruction pattern for floating-point modes.

@cindex @code{IFN_EXPM1} internal function
@item @samp{IFN_EXPM1}
The @code{IFN_EXPM1} internal function directly maps to the @code{expm1}
instruction pattern for floating-point modes.

@cindex @code{IFN_LOG} internal function
@item @samp{IFN_LOG}
The @code{IFN_LOG} internal function directly maps to the @code{log}
instruction pattern for floating-point modes.

@cindex @code{IFN_LOG10} internal function
@item @samp{IFN_LOG10}
The @code{IFN_LOG10} internal function directly maps to the @code{log10}
instruction pattern for floating-point modes.

@cindex @code{IFN_LOG1P} internal function
@item @samp{IFN_LOG1P}
The @code{IFN_LOG1P} internal function directly maps to the @code{log1p}
instruction pattern for floating-point modes.

@cindex @code{IFN_LOG2} internal function
@item @samp{IFN_LOG2}
The @code{IFN_LOG2} internal function directly maps to the @code{log2}
instruction pattern for floating-point modes.

@cindex @code{IFN_LOGB} internal function
@item @samp{IFN_LOGB}
The @code{IFN_LOGB} internal function directly maps to the @code{logb}
instruction pattern for floating-point modes.

@cindex @code{IFN_SIGNBIT} internal function
@item @samp{IFN_SIGNBIT}
The @code{IFN_SIGNBIT} internal function directly maps to the @code{signbit}
instruction pattern for floating-point modes.

@cindex @code{IFN_SIGNIFICAND} internal function
@item @samp{IFN_SIGNIFICAND}
The @code{IFN_SIGNIFICAND} internal function directly maps to the
@code{significand} instruction pattern for floating-point modes.

@cindex @code{IFN_SIN} internal function
@item @samp{IFN_SIN}
The @code{IFN_SIN} internal function directly maps to the @code{sin}
instruction pattern for floating-point modes.

@cindex @code{IFN_SINH} internal function
@item @samp{IFN_SINH}
The @code{IFN_SINH} internal function directly maps to the @code{sinh}
instruction pattern for floating-point modes.

@cindex @code{IFN_SQRT} internal function
@item @samp{IFN_SQRT}
The @code{IFN_SQRT} internal function directly maps to the @code{sqrt}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_TAN} internal function
@item @samp{IFN_TAN}
The @code{IFN_TAN} internal function directly maps to the @code{tan}
instruction pattern for floating-point modes.

@cindex @code{IFN_TANH} internal function
@item @samp{IFN_TANH}
The @code{IFN_TANH} internal function directly maps to the @code{tanh}
instruction pattern for floating-point modes.

@cindex @code{IFN_ICEIL} internal function
@item @samp{IFN_ICEIL}
The @code{IFN_ICEIL} internal function directly maps to the @code{lceil}
instruction pattern for floating-point modes.

@cindex @code{IFN_IFLOOR} internal function
@item @samp{IFN_IFLOOR}
The @code{IFN_IFLOOR} internal function directly maps to the @code{lfloor}
instruction pattern for floating-point modes.

@cindex @code{IFN_IRINT} internal function
@item @samp{IFN_IRINT}
The @code{IFN_IRINT} internal function directly maps to the @code{lrint}
instruction pattern for floating-point modes.

@cindex @code{IFN_IROUND} internal function
@item @samp{IFN_IROUND}
The @code{IFN_IROUND} internal function directly maps to the @code{lround}
instruction pattern for floating-point modes.

@cindex @code{IFN_LCEIL} internal function
@item @samp{IFN_LCEIL}
The @code{IFN_LCEIL} internal function directly maps to the @code{lceil}
instruction pattern for floating-point modes.

@cindex @code{IFN_LFLOOR} internal function
@item @samp{IFN_LFLOOR}
The @code{IFN_LFLOOR} internal function directly maps to the @code{lfloor}
instruction pattern for floating-point modes.

@cindex @code{IFN_LRINT} internal function
@item @samp{IFN_LRINT}
The @code{IFN_LRINT} internal function directly maps to the @code{lrint}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_LROUND} internal function
@item @samp{IFN_LROUND}
The @code{IFN_LROUND} internal function directly maps to the @code{lround}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_LLCEIL} internal function
@item @samp{IFN_LLCEIL}
The @code{IFN_LLCEIL} internal function directly maps to the @code{lceil}
instruction pattern for floating-point modes.

@cindex @code{IFN_LLFLOOR} internal function
@item @samp{IFN_LLFLOOR}
The @code{IFN_LLFLOOR} internal function directly maps to the @code{lfloor}
instruction pattern for floating-point modes.

@cindex @code{IFN_LLRINT} internal function
@item @samp{IFN_LLRINT}
The @code{IFN_LLRINT} internal function directly maps to the @code{lrint}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_LLROUND} internal function
@item @samp{IFN_LLROUND}
The @code{IFN_LLROUND} internal function directly maps to the
@code{lround} instruction pattern for floating-point modes including
those for @code{_Float@var{n}}

@cindex @code{IFN_CEIL} internal function
@item @samp{IFN_CEIL}
The @code{IFN_CEIL} internal function directly maps to the @code{ceil}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_FLOOR} internal function
@item @samp{IFN_FLOOR}
The @code{IFN_FLOOR} internal function directly maps to the @code{floor}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_NEARBYINT} internal function
@item @samp{IFN_NEARBYINT}
The @code{IFN_NEARBYINT} internal function directly maps to the
@code{nearbyint} instruction pattern for floating-point modes including
those for @code{_Float@var{n}}

@cindex @code{IFN_RINT} internal function
@item @samp{IFN_RINT}
The @code{IFN_RINT} internal function directly maps to the @code{rint}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_ROUND} internal function
@item @samp{IFN_ROUND}
The @code{IFN_ROUND} internal function directly maps to the @code{round}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_ROUNDEVEN} internal function
@item @samp{IFN_ROUNDEVEN}
The @code{IFN_ROUNDEVEN} internal function directly maps to the
@code{roundeven} instruction pattern for floating-point modes
including those for @code{_Float@var{n}}

@cindex @code{IFN_TRUNC} internal function
@item @samp{IFN_TRUNC}
The @code{IFN_TRUNC} internal function directly maps to the @code{btrunc}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_ATAN2} internal function
@item @samp{IFN_ATAN2}
The @code{IFN_ATAN2} internal function directly maps to the @code{atan2}
instruction pattern for floating-point modes.

@cindex @code{IFN_COPYSIGN} internal function
@item @samp{IFN_COPYSIGN}
The @code{IFN_COPYSIGN} internal function directly maps to the
@code{copysign} instruction pattern for floating-point modes including
those for @code{_Float@var{n}}

@cindex @code{IFN_FMOD} internal function
@item @samp{IFN_FMOD}
The @code{IFN_FMOD} internal function directly maps to the @code{fmod}
instruction pattern for floating-point modes.

@cindex @code{IFN_HYPOT} internal function
@item @samp{IFN_HYPOT}
The @code{IFN_HYPOT} internal function directly maps to the @code{hypot}
instruction pattern for floating-point modes.

@cindex @code{IFN_POW} internal function
@item @samp{IFN_POW}
The @code{IFN_POW} internal function directly maps to the @code{pow}
instruction pattern for floating-point modes.

@cindex @code{IFN_REMAINDER} internal function
@item @samp{IFN_REMAINDER}
The @code{IFN_REMAINDER} internal function directly maps to the
@code{remainder} instruction pattern for floating-point modes.

@cindex @code{IFN_SCALB} internal function
@item @samp{IFN_SCALB}
The @code{IFN_SCALB} internal function directly maps to the @code{scalb}
instruction pattern for floating-point modes.

@cindex @code{IFN_FMIN} internal function
@item @samp{IFN_FMIN}
The @code{IFN_FMIN} internal function directly maps to the @code{fmin}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_FMAX} internal function
@item @samp{IFN_FMAX}
The @code{IFN_FMAX} internal function directly maps to the @code{fmax}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_LDEXP} internal function
@item @samp{IFN_LDEXP}
The @code{IFN_LDEXP} internal function directly maps to the @code{ldexp}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_FMA} internal function
@item @samp{IFN_FMA}
The @code{IFN_FMA} internal function directly maps to the @code{fma}
instruction pattern for floating-point modes including those for
@code{_Float@var{n}}

@cindex @code{IFN_CLRSB} internal function
@item @samp{IFN_CLRSB}
The @code{IFN_CLRSB} internal function directly maps to the @code{clrsb}
instruction pattern for integer and integer vector modes.

@cindex @code{IFN_CLZ} internal function
@item @samp{IFN_CLZ}
The @code{IFN_CLZ} internal function directly maps to the @code{clz}
instruction pattern for integer and integer vector modes.

@cindex @code{IFN_CTZ} internal function
@item @samp{IFN_CTZ}
The @code{IFN_CTZ} internal function directly maps to the @code{ctz}
instruction pattern for integer and integer vector modes.

@cindex @code{IFN_FFS} internal function
@item @samp{IFN_FFS}
The @code{IFN_FFS} internal function directly maps to the @code{ffs}
instruction pattern for integer and integer vector modes.

@cindex @code{IFN_PARITY} internal function
@item @samp{IFN_PARITY}
The @code{IFN_PARITY} internal function directly maps to the @code{parity}
instruction pattern for integer and integer vector modes.

@cindex @code{IFN_POPCOUNT} internal function
@item @samp{IFN_POPCOUNT}
The @code{IFN_POPCOUNT} internal function directly maps to the @code{popcount}
instruction pattern for integer and integer vector modes.

@end table

@node Other Internal Functions
@subsection Other Internal Functions

@table @asis

@cindex @code{IFN_GOMP_TARGET_REV} internal function
@item @samp{IFN_GOMP_TARGET_REV}
The @code{IFN_GOMP_TARGET_REV} internal function is expanded by the
@code{expand_GOMP_TARGET_REV} function.

@cindex @code{IFN_GOMP_USE_SIMT} internal function
@item @samp{IFN_GOMP_USE_SIMT}
The @code{IFN_GOMP_USE_SIMT} internal function is expanded by the
@code{expand_GOMP_USE_SIMT} function.

@cindex @code{IFN_GOMP_SIMT_ENTER} internal function
@item @samp{IFN_GOMP_SIMT_ENTER}
The @code{IFN_GOMP_SIMT_ENTER} internal function is expanded by the
@code{expand_GOMP_SIMT_ENTER} function.

@cindex @code{IFN_GOMP_SIMT_ENTER_ALLOC} internal function
@item @samp{IFN_GOMP_SIMT_ENTER_ALLOC}
The @code{IFN_GOMP_SIMT_ENTER_ALLOC} internal function is expanded by
the @code{expand_GOMP_SIMT_ENTER_ALLOC} function.

@cindex @code{IFN_GOMP_SIMT_EXIT} internal function
@item @samp{IFN_GOMP_SIMT_EXIT}
The @code{IFN_GOMP_SIMT_EXIT} internal function is expanded by the
@code{expand_GOMP_SIMT_EXIT} function.

@cindex @code{IFN_GOMP_SIMT_LANE} internal function
@item @samp{IFN_GOMP_SIMT_LANE}
The @code{IFN_GOMP_SIMT_LANE} internal function is expanded by the
@code{expand_GOMP_SIMT_LANE} function.

@cindex @code{IFN_GOMP_SIMT_VF} internal function
@item @samp{IFN_GOMP_SIMT_VF}
The @code{IFN_GOMP_SIMT_VF} internal function is expanded by the
@code{expand_GOMP_SIMT_VF} function.

@cindex @code{IFN_GOMP_MAX_VF} internal function
@item @samp{IFN_GOMP_MAX_VF}
The @code{IFN_GOMP_MAX_VF} internal function is expanded by the
@code{expand_GOMP_MAX_VF} function.

@cindex @code{IFN_GOMP_SIMT_LAST_LANE} internal function
@item @samp{IFN_GOMP_SIMT_LAST_LANE}
The @code{IFN_GOMP_SIMT_LAST_LANE} internal function is expanded by the
@code{expand_GOMP_SIMT_LAST_LANE} function.

@cindex @code{IFN_GOMP_SIMT_ORDERED_PRED} internal function
@item @samp{IFN_GOMP_SIMT_ORDERED_PRED}
The @code{IFN_GOMP_SIMT_ORDERED_PRED} internal function is expanded by the
@code{expand_GOMP_SIMT_ORDERED_PRED} function.

@cindex @code{IFN_GOMP_SIMT_VOTE_ANY} internal function
@item @samp{IFN_GOMP_SIMT_VOTE_ANY}
The @code{IFN_GOMP_SIMT_VOTE_ANY} internal function is expanded by the
@code{expand_GOMP_SIMT_VOTE_ANY} function.

@cindex @code{IFN_GOMP_SIMT_XCHG_BFLY} internal function
@item @samp{IFN_GOMP_SIMT_XCHG_BFLY}
The @code{IFN_GOMP_SIMT_XCHG_BFLY} internal function is expanded by the
@code{expand_GOMP_SIMT_XCHG_BFLY} function.

@cindex @code{IFN_GOMP_SIMT_XCHG_IDX} internal function
@item @samp{IFN_GOMP_SIMT_XCHG_IDX}
The @code{IFN_GOMP_SIMT_XCHG_IDX} internal function is expanded by the
@code{expand_GOMP_SIMT_XCHG_IDX} function.

@cindex @code{IFN_GOMP_SIMD_LANE} internal function
@item @samp{IFN_GOMP_SIMD_LANE}
The @code{IFN_GOMP_SIMD_LANE} internal function is expanded by the
@code{expand_GOMP_SIMD_LANE} function.

@cindex @code{IFN_GOMP_SIMD_VF} internal function
@item @samp{IFN_GOMP_SIMD_VF}
The @code{IFN_GOMP_SIMD_VF} internal function is expanded by the
@code{expand_GOMP_SIMD_VF} function.

@cindex @code{IFN_GOMP_SIMD_LAST_LANE} internal function
@item @samp{IFN_GOMP_SIMD_LAST_LANE}
The @code{IFN_GOMP_SIMD_LAST_LANE} internal function is expanded by the
@code{expand_GOMP_SIMD_LAST_LANE} function.

@cindex @code{IFN_GOMP_SIMD_ORDERED_START} internal function
@item @samp{IFN_GOMP_SIMD_ORDERED_START}
The @code{IFN_GOMP_SIMD_ORDERED_START} internal function is expanded by the
@code{expand_GOMP_SIMD_ORDERED_START} function.

@cindex @code{IFN_GOMP_SIMD_ORDERED_END} internal function
@item @samp{IFN_GOMP_SIMD_ORDERED_END}
The @code{IFN_GOMP_SIMD_ORDERED_END} internal function is expanded by the
@code{expand_GOMP_SIMD_ORDERED_END} function.

@cindex @code{IFN_GOMP_DISPATCH} internal function
@item @samp{IFN_GOMP_DISPATCH}
The @code{IFN_GOMP_DISPATCH} internal function is expanded by the
@code{expand_GOMP_DISPATCH} function.

@cindex @code{IFN_LOOP_VECTORIZED} internal function
@item @samp{IFN_LOOP_VECTORIZED}
The @code{IFN_LOOP_VECTORIZED} internal function is expanded by the
@code{expand_LOOP_VECTORIZED} function.

@cindex @code{IFN_LOOP_DIST_ALIAS} internal function
@item @samp{IFN_LOOP_DIST_ALIAS}
The @code{IFN_LOOP_DIST_ALIAS} internal function is expanded by the
@code{expand_LOOP_DIST_ALIAS} function.

@cindex @code{IFN_ANNOTATE} internal function
@item @samp{IFN_ANNOTATE}
The @code{IFN_ANNOTATE} internal function is expanded by the
@code{expand_ANNOTATE} function.

@cindex @code{IFN_UBSAN_NULL} internal function
@item @samp{IFN_UBSAN_NULL}
The @code{IFN_UBSAN_NULL} internal function is expanded by the
@code{expand_UBSAN_NULL} function.

@cindex @code{IFN_UBSAN_BOUNDS} internal function
@item @samp{IFN_UBSAN_BOUNDS}
The @code{IFN_UBSAN_BOUNDS} internal function is expanded by the
@code{expand_UBSAN_BOUNDS} function.

@cindex @code{IFN_UBSAN_VPTR} internal function
@item @samp{IFN_UBSAN_VPTR}
The @code{IFN_UBSAN_VPTR} internal function is expanded by the
@code{expand_UBSAN_VPTR} function.

@cindex @code{IFN_UBSAN_CHECK_ADD} internal function
@item @samp{IFN_UBSAN_CHECK_ADD}
The @code{IFN_UBSAN_CHECK_ADD} internal function is expanded by the
@code{expand_UBSAN_CHECK_ADD} function.

@cindex @code{IFN_UBSAN_CHECK_SUB} internal function
@item @samp{IFN_UBSAN_CHECK_SUB}
The @code{IFN_UBSAN_CHECK_SUB} internal function is expanded by the
@code{expand_UBSAN_CHECK_SUB} function.

@cindex @code{IFN_UBSAN_CHECK_MUL} internal function
@item @samp{IFN_UBSAN_CHECK_MUL}
The @code{IFN_UBSAN_CHECK_MUL} internal function is expanded by the
@code{expand_UBSAN_CHECK_MUL} function.

@cindex @code{IFN_UBSAN_PTR} internal function
@item @samp{IFN_UBSAN_PTR}
The @code{IFN_UBSAN_PTR} internal function is expanded by the
@code{expand_UBSAN_PTR} function.

@cindex @code{IFN_UBSAN_OBJECT_SIZE} internal function
@item @samp{IFN_UBSAN_OBJECT_SIZE}
The @code{IFN_UBSAN_OBJECT_SIZE} internal function is expanded by the
@code{expand_UBSAN_OBJECT_SIZE} function.

@cindex @code{IFN_ABNORMAL_DISPATCHER} internal function
@item @samp{IFN_ABNORMAL_DISPATCHER}
The @code{IFN_ABNORMAL_DISPATCHER} internal function is expanded by the
@code{expand_ABNORMAL_DISPATCHER} function.

@cindex @code{IFN_BUILTIN_EXPECT} internal function
@item @samp{IFN_BUILTIN_EXPECT}
The @code{IFN_BUILTIN_EXPECT} internal function is expanded by the
@code{expand_BUILTIN_EXPECT} function.

@cindex @code{IFN_HWASAN_ALLOCA_POISON} internal function
@item @samp{IFN_HWASAN_ALLOCA_POISON}
The @code{IFN_HWASAN_ALLOCA_POISON} internal function is expanded by the
@code{expand_HWASAN_ALLOCA_POISON} function.

@cindex @code{IFN_HWASAN_ALLOCA_UNPOISON} internal function
@item @samp{IFN_HWASAN_ALLOCA_UNPOISON}
The @code{IFN_HWASAN_ALLOCA_UNPOISON} internal function is expanded by the
@code{expand_HWASAN_ALLOCA_UNPOISON} function.

@cindex @code{IFN_HWASAN_CHOOSE_TAG} internal function
@item @samp{IFN_HWASAN_CHOOSE_TAG}
The @code{IFN_HWASAN_CHOOSE_TAG} internal function is expanded by the
@code{expand_HWASAN_CHOOSE_TAG} function.

@cindex @code{IFN_HWASAN_CHECK} internal function
@item @samp{IFN_HWASAN_CHECK}
The @code{IFN_HWASAN_CHECK} internal function is expanded by the
@code{expand_HWASAN_CHECK} function.

@cindex @code{IFN_HWASAN_MARK} internal function
@item @samp{IFN_HWASAN_MARK}
The @code{IFN_HWASAN_MARK} internal function is expanded by the
@code{expand_HWASAN_MARK} function.

@cindex @code{IFN_HWASAN_SET_TAG} internal function
@item @samp{IFN_HWASAN_SET_TAG}
The @code{IFN_HWASAN_SET_TAG} internal function is expanded by the
@code{expand_HWASAN_SET_TAG} function.

@cindex @code{IFN_ASAN_CHECK} internal function
@item @samp{IFN_ASAN_CHECK}
The @code{IFN_ASAN_CHECK} internal function is expanded by the
@code{expand_ASAN_CHECK} function.

@cindex @code{IFN_ASAN_MARK} internal function
@item @samp{IFN_ASAN_MARK}
The @code{IFN_ASAN_MARK} internal function is expanded by the
@code{expand_ASAN_MARK} function.

@cindex @code{IFN_ASAN_POISON} internal function
@item @samp{IFN_ASAN_POISON}
The @code{IFN_ASAN_POISON} internal function is expanded by the
@code{expand_ASAN_POISON} function.

@cindex @code{IFN_ASAN_POISON_USE} internal function
@item @samp{IFN_ASAN_POISON_USE}
The @code{IFN_ASAN_POISON_USE} internal function is expanded by the
@code{expand_ASAN_POISON_USE} function.

@cindex @code{IFN_ADD_OVERFLOW} internal function
@item @samp{IFN_ADD_OVERFLOW}
The @code{IFN_ADD_OVERFLOW} internal function is expanded by the
@code{expand_ADD_OVERFLOW} function.

@cindex @code{IFN_SUB_OVERFLOW} internal function
@item @samp{IFN_SUB_OVERFLOW}
The @code{IFN_SUB_OVERFLOW} internal function is expanded by the
@code{expand_SUB_OVERFLOW} function.

@cindex @code{IFN_MUL_OVERFLOW} internal function
@item @samp{IFN_MUL_OVERFLOW}
The @code{IFN_MUL_OVERFLOW} internal function is expanded by the
@code{expand_MUL_OVERFLOW} function.

@cindex @code{IFN_UADDC} internal function
@item @samp{IFN_UADDC}
The @code{IFN_UADDC} internal function is expanded by the @code{expand_UADDC}
function.

@cindex @code{IFN_USUBC} internal function
@item @samp{IFN_USUBC}
The @code{IFN_USUBC} internal function is expanded by the @code{expand_USUBC} function.

@cindex @code{IFN_TSAN_FUNC_EXIT} internal function
@item @samp{IFN_TSAN_FUNC_EXIT}
The @code{IFN_TSAN_FUNC_EXIT} internal function is expanded by the
@code{expand_TSAN_FUNC_EXIT} function.

@cindex @code{IFN_VA_ARG} internal function
@item @samp{IFN_VA_ARG}
The @code{IFN_VA_ARG} internal function is expanded by the
@code{expand_VA_ARG} function.

@cindex @code{IFN_VEC_CONVERT} internal function
@item @samp{IFN_VEC_CONVERT}
The @code{IFN_VEC_CONVERT} internal function is expanded by the
@code{expand_VEC_CONVERT} function.

@cindex @code{IFN_RAWMEMCHR} internal function
@item @samp{IFN_RAWMEMCHR}
The @code{IFN_RAWMEMCHR} internal function is expanded by the
@code{expand_RAWMEMCHR} function.

@cindex @code{IFN_UNIQUE} internal function
@item @samp{IFN_UNIQUE}
The @code{IFN_UNIQUE} internal function is expanded by the
@code{expand_UNIQUE} function.

@cindex @code{IFN_PHI} internal function
@item @samp{IFN_PHI}
The @code{IFN_PHI} internal function is used by the GIMPLE frontend and
lowered to PHI nodes.

@cindex @code{IFN_DEFERRED_INIT} internal function
@item @samp{IFN_DEFERRED_INIT}
The @code{IFN_DEFERRED_INIT} internal function is expanded by the
@code{expand_DEFERRED_INIT} function.

@cindex @code{IFN_ACCESS_WITH_SIZE} internal function
@item @samp{IFN_ACCESS_WITH_SIZE}
The @code{IFN_ACCESS_WITH_SIZE} internal function is expanded by the
@code{expand_ACCESS_WITH_SIZE} function.

@cindex @code{IFN_GOACC_DIM_SIZE} internal function
@item @samp{IFN_GOACC_DIM_SIZE}
The @code{IFN_GOACC_DIM_SIZE} internal function is expanded by the
@code{expand_GOACC_DIM_SIZE} function.

@cindex @code{IFN_GOACC_DIM_POS} internal function
@item @samp{IFN_GOACC_DIM_POS}
The @code{IFN_GOACC_DIM_POS} internal function is expanded by the
@code{expand_GOACC_DIM_POS} function.

@cindex @code{IFN_GOACC_LOOP} internal function
@item @samp{IFN_GOACC_LOOP}
The @code{IFN_GOACC_LOOP} internal function is expanded by the
@code{expand_GOACC_LOOP} function.

@cindex @code{IFN_GOACC_REDUCTION} internal function
@item @samp{IFN_GOACC_REDUCTION}
The @code{IFN_GOACC_REDUCTION} internal function is expanded by the
@code{expand_GOACC_REDUCTION} function.

@cindex @code{IFN_GOACC_TILE} internal function
@item @samp{IFN_GOACC_TILE}
The @code{IFN_GOACC_TILE} internal function is expanded by the
@code{expand_GOACC_TILE} function.

@cindex @code{IFN_SET_EDOM} internal function
@item @samp{IFN_SET_EDOM}
The @code{IFN_SET_EDOM} internal function is expanded by the
@code{expand_SET_EDOM} function.

@cindex @code{IFN_ATOMIC_BIT_TEST_AND_SET} internal function
@item @samp{IFN_ATOMIC_BIT_TEST_AND_SET}
The @code{IFN_ATOMIC_BIT_TEST_AND_SET} internal function is expanded by the
@code{expand_ATOMIC_BIT_TEST_AND_SET} function.

@cindex @code{IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT} internal function
@item @samp{IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT}
The @code{IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT} internal function is expanded by
the @code{expand_ATOMIC_BIT_TEST_AND_COMPLEMENT} function.

@cindex @code{IFN_ATOMIC_BIT_TEST_AND_RESET} internal function
@item @samp{IFN_ATOMIC_BIT_TEST_AND_RESET}
The @code{IFN_ATOMIC_BIT_TEST_AND_RESET} internal function is expanded by
the @code{expand_ATOMIC_BIT_TEST_AND_RESET} function.

@cindex @code{IFN_ATOMIC_COMPARE_EXCHANGE} internal function
@item @samp{IFN_ATOMIC_COMPARE_EXCHANGE}
The @code{IFN_ATOMIC_COMPARE_EXCHANGE} internal function is expanded by the
@code{expand_ATOMIC_COMPARE_EXCHANGE} function.

@cindex @code{IFN_ATOMIC_ADD_FETCH_CMP_0} internal function
@item @samp{IFN_ATOMIC_ADD_FETCH_CMP_0}
The @code{IFN_ATOMIC_ADD_FETCH_CMP_0} internal function is expanded by the
@code{expand_ATOMIC_ADD_FETCH_CMP_0} function.

@cindex @code{IFN_ATOMIC_SUB_FETCH_CMP_0} internal function
@item @samp{IFN_ATOMIC_SUB_FETCH_CMP_0}
The @code{IFN_ATOMIC_SUB_FETCH_CMP_0} internal function is expanded by the
@code{expand_ATOMIC_SUB_FETCH_CMP_0} function.

@cindex @code{IFN_ATOMIC_AND_FETCH_CMP_0} internal function
@item @samp{IFN_ATOMIC_AND_FETCH_CMP_0}
The @code{IFN_ATOMIC_AND_FETCH_CMP_0} internal function is expanded by the
@code{expand_ATOMIC_AND_FETCH_CMP_0} function.

@cindex @code{IFN_ATOMIC_OR_FETCH_CMP_0} internal function
@item @samp{IFN_ATOMIC_OR_FETCH_CMP_0}
The @code{IFN_ATOMIC_OR_FETCH_CMP_0} internal function is expanded by the
@code{expand_ATOMIC_OR_FETCH_CMP_0} function.

@cindex @code{IFN_ATOMIC_XOR_FETCH_CMP_0} internal function
@item @samp{IFN_ATOMIC_XOR_FETCH_CMP_0}
The @code{IFN_ATOMIC_XOR_FETCH_CMP_0} internal function is expanded by the
@code{expand_ATOMIC_XOR_FETCH_CMP_0} function.

@cindex @code{IFN_FALLTHROUGH} internal function
@item @samp{IFN_FALLTHROUGH}
The @code{IFN_FALLTHROUGH} internal function is expanded by the
@code{expand_FALLTHROUGH} function.

@cindex @code{IFN_LAUNDER} internal function
@item @samp{IFN_LAUNDER}
The @code{IFN_LAUNDER} internal function is expanded by the
@code{expand_LAUNDER} function.

@cindex @code{IFN_DIVMOD} internal function
@item @samp{IFN_DIVMOD}
The @code{IFN_DIVMOD} internal function is expanded by the
@code{expand_DIVMOD} function.

@cindex @code{IFN_CO_ACTOR} internal function
@item @samp{IFN_CO_ACTOR}
The @code{IFN_CO_ACTOR} internal function is expanded by the
@code{expand_CO_ACTOR} function.

@cindex @code{IFN_CO_YIELD} internal function
@item @samp{IFN_CO_YIELD}
The @code{IFN_CO_YIELD} internal function is expanded by the
@code{expand_CO_YIELD} function.

@cindex @code{IFN_CO_SUSPN} internal function
@item @samp{IFN_CO_SUSPN}
The @code{IFN_CO_SUSPN} internal function is expanded by the
@code{expand_CO_SUSPN} function.

@cindex @code{IFN_CO_FRAME} internal function
@item @samp{IFN_CO_FRAME}
The @code{IFN_CO_FRAME} internal function is expanded by the
@code{expand_CO_FRAME} function.

@cindex @code{IFN_NOP} internal function
@item @samp{IFN_NOP}
The @code{IFN_NOP} internal function is expanded by the @code{expand_NOP}
function.

@cindex @code{IFN_SHUFFLEVECTOR} internal function
@item @samp{IFN_SHUFFLEVECTOR}
The @code{IFN_SHUFFLEVECTOR} internal function is expanded by the
@code{expand_SHUFFLEVECTOR} function.

@cindex @code{IFN_SPACESHIP} internal function
@item @samp{IFN_SPACESHIP}
The @code{IFN_SPACESHIP} internal function is expanded by the
@code{expand_SPACESHIP} function.

@cindex @code{IFN_ASSUME} internal function
@item @samp{IFN_ASSUME}
The @code{IFN_ASSUME} internal function is expanded by the
@code{expand_ASSUME} function.

@cindex @code{IFN_MASK_CALL} internal function
@item @samp{IFN_MASK_CALL}
The @code{IFN_MASK_CALL} internal function is expanded by the
@code{expand_MASK_CALL} function.

@cindex @code{IFN_MULBITINT} internal function
@item @samp{IFN_MULBITINT}
The @code{IFN_MULBITINT} internal function is expanded by the
@code{expand_MULBITINT} function.

@cindex @code{IFN_DIVMODBITINT} internal function
@item @samp{IFN_DIVMODBITINT}
The @code{IFN_DIVMODBITINT} internal function is expanded by the
@code{expand_DIVMODBITINT} function.

@cindex @code{IFN_FLOATTOBITINT} internal function
@item @samp{IFN_FLOATTOBITINT}
The @code{IFN_FLOATTOBITINT} internal function is expanded by the
@code{expand_FLOATTOBITINT} function.

@cindex @code{IFN_BITINTTOFLOAT} internal function
@item @samp{IFN_BITINTTOFLOAT}
The @code{IFN_BITINTTOFLOAT} internal function is expanded by the
@code{expand_BITINTTOFLOAT} function.

@cindex @code{IFN_VARYING} internal function
@item @samp{IFN_VARYING}
Use @code{IFN_VARYING} as a temporary placeholder for a value whose
definition is still being built by the current pass.  The pass that creates
it must replace it before finishing; the verifier rejects any remaining calls.

@end table

