#include "symtab.h"
#include "all-tree.def"
#include "builtins.def"
#include "internal-fn.def"
#include "treestruct.def"
Go to the source code of this file.
Data Structures | |
struct | alias_pair |
struct | tree_base |
struct | tree_typed |
struct | tree_common |
struct | tree_int_cst |
struct | tree_real_cst |
struct | tree_fixed_cst |
struct | tree_string |
struct | tree_raw_data |
struct | tree_complex |
struct | tree_vector |
struct | tree_poly_int_cst |
struct | tree_identifier |
struct | tree_list |
struct | tree_vec |
struct | constructor_elt |
struct | tree_constructor |
struct | tree_exp |
struct | ssa_use_operand_t |
Macros | |
#define | ECF_CONST (1 << 0) |
#define | ECF_PURE (1 << 1) |
#define | ECF_LOOPING_CONST_OR_PURE (1 << 2) |
#define | ECF_NORETURN (1 << 3) |
#define | ECF_MALLOC (1 << 4) |
#define | ECF_MAY_BE_ALLOCA (1 << 5) |
#define | ECF_NOTHROW (1 << 6) |
#define | ECF_RETURNS_TWICE (1 << 7) |
#define | ECF_SIBCALL (1 << 8) |
#define | ECF_NOVOPS (1 << 9) |
#define | ECF_LEAF (1 << 10) |
#define | ECF_RET1 (1 << 11) |
#define | ECF_TM_PURE (1 << 12) |
#define | ECF_TM_BUILTIN (1 << 13) |
#define | ECF_BY_DESCRIPTOR (1 << 14) |
#define | ECF_COLD (1 << 15) |
#define | ECF_XTHROW (1 << 16) |
#define | EAF_UNUSED (1 << 1) |
#define | EAF_NO_DIRECT_CLOBBER (1 << 2) |
#define | EAF_NO_INDIRECT_CLOBBER (1 << 3) |
#define | EAF_NO_DIRECT_ESCAPE (1 << 4) |
#define | EAF_NO_INDIRECT_ESCAPE (1 << 5) |
#define | EAF_NOT_RETURNED_DIRECTLY (1 << 6) |
#define | EAF_NOT_RETURNED_INDIRECTLY (1 << 7) |
#define | EAF_NO_DIRECT_READ (1 << 8) |
#define | EAF_NO_INDIRECT_READ (1 << 9) |
#define | ERF_RETURN_ARG_MASK (3) |
#define | ERF_RETURNS_ARG (1 << 2) |
#define | ERF_NOALIAS (1 << 3) |
#define | DEFTREECODE(SYM, STRING, TYPE, NARGS) |
#define | END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, |
#define | NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE) |
#define | CODE_CONTAINS_STRUCT(CODE, STRUCT) |
#define | BUILT_IN_LAST (BUILT_IN_NORMAL + 1) |
#define | DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) |
#define | DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GCC_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) |
#define | DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_FLOATN_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) |
#define | DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C23_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C2Y_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_BUILTIN_STUB(ENUM, NAME) |
#define | DEF_COROUTINE_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN_ONLY(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOMP_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | ATTR_MATHFN_ERRNO |
#define | ATTR_MATHFN_FPROUNDING |
#define | ATTR_MATHFN_FPROUNDING_ERRNO |
#define | ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST |
#define | ATTR_NOTHROWCALL_LEAF_LIST |
#define | ACOSH_TYPE(F) |
#define | ATAN2_TYPE(F) |
#define | ATANH_TYPE(F) |
#define | CEIL_TYPE(F) |
#define | COPYSIGN_TYPE(F) |
#define | COSH_TYPE(F) |
#define | FABS_TYPE(F) |
#define | FDIM_TYPE(F) |
#define | FLOOR_TYPE(F) |
#define | FMA_TYPE(F) |
#define | FMAX_TYPE(F) |
#define | FMIN_TYPE(F) |
#define | FREXP_TYPE(F) |
#define | HUGE_VAL_TYPE(F) |
#define | HYPOT_TYPE(F) |
#define | ILOGB_TYPE(F) |
#define | INF_TYPE(F) |
#define | LDEXP_TYPE(F) |
#define | LGAMMA_TYPE(F) |
#define | LLRINT_TYPE(F) |
#define | LOG10_TYPE(F) |
#define | LRINT_TYPE(F) |
#define | MODF_TYPE(F) |
#define | NAN_TYPE(F) |
#define | NEARBYINT_TYPE(F) |
#define | NEXTAFTER_TYPE(F) |
#define | REMQUO_TYPE(F) |
#define | RINT_TYPE(F) |
#define | ROUND_TYPE(F) |
#define | ROUNDEVEN_TYPE(F) |
#define | SCALBLN_TYPE(F) |
#define | SCALBN_TYPE(F) |
#define | SINH_TYPE(F) |
#define | SQRT_TYPE(F) |
#define | TRUNC_TYPE(F) |
#define | CABS_TYPE(F) |
#define | CACOSH_TYPE(F) |
#define | CARG_TYPE(F) |
#define | CASINH_TYPE(F) |
#define | CPOW_TYPE(F) |
#define | CPROJ_TYPE(F) |
#define | DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) |
#define | DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) |
#define | DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_INT_EXT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) |
#define | DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) |
#define | DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) |
#define | DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GCC_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) |
#define | DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_FLOATN_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) |
#define | DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C23_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C2Y_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_BUILTIN_STUB(ENUM, NAME) |
#define | DEF_COROUTINE_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOACC_BUILTIN_ONLY(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_GOMP_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) |
#define | ATTR_MATHFN_ERRNO |
#define | ATTR_MATHFN_FPROUNDING |
#define | ATTR_MATHFN_FPROUNDING_ERRNO |
#define | ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST |
#define | ATTR_NOTHROWCALL_LEAF_LIST |
#define | ACOSH_TYPE(F) |
#define | ATAN2_TYPE(F) |
#define | ATANH_TYPE(F) |
#define | CEIL_TYPE(F) |
#define | COPYSIGN_TYPE(F) |
#define | COSH_TYPE(F) |
#define | FABS_TYPE(F) |
#define | FDIM_TYPE(F) |
#define | FLOOR_TYPE(F) |
#define | FMA_TYPE(F) |
#define | FMAX_TYPE(F) |
#define | FMIN_TYPE(F) |
#define | FREXP_TYPE(F) |
#define | HUGE_VAL_TYPE(F) |
#define | HYPOT_TYPE(F) |
#define | ILOGB_TYPE(F) |
#define | INF_TYPE(F) |
#define | LDEXP_TYPE(F) |
#define | LGAMMA_TYPE(F) |
#define | LLRINT_TYPE(F) |
#define | LOG10_TYPE(F) |
#define | LRINT_TYPE(F) |
#define | MODF_TYPE(F) |
#define | NAN_TYPE(F) |
#define | NEARBYINT_TYPE(F) |
#define | NEXTAFTER_TYPE(F) |
#define | REMQUO_TYPE(F) |
#define | RINT_TYPE(F) |
#define | ROUND_TYPE(F) |
#define | ROUNDEVEN_TYPE(F) |
#define | SCALBLN_TYPE(F) |
#define | SCALBN_TYPE(F) |
#define | SINH_TYPE(F) |
#define | SQRT_TYPE(F) |
#define | TRUNC_TYPE(F) |
#define | CABS_TYPE(F) |
#define | CACOSH_TYPE(F) |
#define | CARG_TYPE(F) |
#define | CASINH_TYPE(F) |
#define | CPOW_TYPE(F) |
#define | CPROJ_TYPE(F) |
#define | DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) |
#define | DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) |
#define | DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_INT_EXT_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_WIDENING_OPTAB_FN(NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) |
#define | DEF_INTERNAL_COND_FN(NAME, FLAGS, OPTAB, TYPE) |
#define | DEF_INTERNAL_SIGNED_COND_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) |
#define | DEFTREESTRUCT(ENUM, NAME) |
#define | OMP_FAIL_MEMORY_ORDER_SHIFT 3 |
#define | NUM_FLOATN_TYPES |
#define | NUM_FLOATNX_TYPES |
#define | NUM_FLOATN_NX_TYPES |
Typedefs | |
typedef unsigned short | priority_type |
typedef tree(* | walk_tree_fn) (tree *, int *, void *) |
typedef tree(* | walk_tree_lh) (tree *, int *, tree(*) (tree *, int *, void *), void *, hash_set< tree > *) |
#define ACOSH_TYPE | ( | F | ) |
Make sure 0 is not a legitimate builtin.
Category: math builtins.
#define ACOSH_TYPE | ( | F | ) |
Make sure 0 is not a legitimate builtin.
Category: math builtins.
#define ATAN2_TYPE | ( | F | ) |
#define ATAN2_TYPE | ( | F | ) |
#define ATANH_TYPE | ( | F | ) |
#define ATANH_TYPE | ( | F | ) |
#define ATTR_MATHFN_ERRNO |
Define an attribute list for math functions that are normally "impure" because some of them may write into global memory for `errno'. If !flag_errno_math they are instead "const".
#define ATTR_MATHFN_ERRNO |
Define an attribute list for math functions that are normally "impure" because some of them may write into global memory for `errno'. If !flag_errno_math they are instead "const".
#define ATTR_MATHFN_FPROUNDING |
Define an attribute list for math functions that are normally "const" but if flag_rounding_math is set they are instead "pure". This distinction accounts for the fact that some math functions check the rounding mode which is akin to examining global memory.
#define ATTR_MATHFN_FPROUNDING |
Define an attribute list for math functions that are normally "const" but if flag_rounding_math is set they are instead "pure". This distinction accounts for the fact that some math functions check the rounding mode which is akin to examining global memory.
#define ATTR_MATHFN_FPROUNDING_ERRNO |
Define an attribute list for math functions that are normally "impure" because some of them may write into global memory for `errno'. If !flag_errno_math, we can possibly use "pure" or "const" depending on whether we care about FP rounding.
#define ATTR_MATHFN_FPROUNDING_ERRNO |
Define an attribute list for math functions that are normally "impure" because some of them may write into global memory for `errno'. If !flag_errno_math, we can possibly use "pure" or "const" depending on whether we care about FP rounding.
#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST |
Define an attribute list for math functions that need to mind FP rounding, but because they store into memory they are never "const" or "pure". Use of this macro is mainly for documentation and maintenance purposes.
#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST |
Define an attribute list for math functions that need to mind FP rounding, but because they store into memory they are never "const" or "pure". Use of this macro is mainly for documentation and maintenance purposes.
#define ATTR_NOTHROWCALL_LEAF_LIST |
Define an attribute list for leaf functions that do not throw exceptions normally, but may throw exceptions when using -fnon-call-exceptions.
#define ATTR_NOTHROWCALL_LEAF_LIST |
Define an attribute list for leaf functions that do not throw exceptions normally, but may throw exceptions when using -fnon-call-exceptions.
#define BUILT_IN_LAST (BUILT_IN_NORMAL + 1) |
Last marker used for LTO stremaing of built_in_class. We cannot add it to the enum since we need the enumb to fit in 2 bits.
Referenced by maybe_warn_pass_by_reference(), pack_ts_function_decl_value_fields(), and unpack_ts_function_decl_value_fields().
#define CABS_TYPE | ( | F | ) |
Category: _Complex math builtins.
#define CABS_TYPE | ( | F | ) |
Category: _Complex math builtins.
#define CACOSH_TYPE | ( | F | ) |
#define CACOSH_TYPE | ( | F | ) |
#define CARG_TYPE | ( | F | ) |
#define CARG_TYPE | ( | F | ) |
#define CASINH_TYPE | ( | F | ) |
#define CASINH_TYPE | ( | F | ) |
#define CEIL_TYPE | ( | F | ) |
#define CEIL_TYPE | ( | F | ) |
#define CODE_CONTAINS_STRUCT | ( | CODE, | |
STRUCT ) |
Referenced by copy_node(), copy_tree_r(), decl_ultimate_origin(), dequeue_and_dump(), DFS::DFS_write_tree_body(), free_node(), hash_tree(), make_node(), print_node(), streamer_alloc_tree(), streamer_read_tree_bitfields(), streamer_read_tree_body(), streamer_write_tree_bitfields(), streamer_write_tree_body(), and streamer_write_tree_header().
#define COPYSIGN_TYPE | ( | F | ) |
#define COPYSIGN_TYPE | ( | F | ) |
#define COSH_TYPE | ( | F | ) |
#define COSH_TYPE | ( | F | ) |
#define CPOW_TYPE | ( | F | ) |
#define CPOW_TYPE | ( | F | ) |
#define CPROJ_TYPE | ( | F | ) |
#define CPROJ_TYPE | ( | F | ) |
Allocate the enum and the name for a builtin, but do not actually define it here at all.
Allocate the enum and the name for a builtin, but do not actually define it here at all.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C11 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C11 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C23 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C23 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C2Y or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C2Y or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C94 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C94 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C99 or above.
Like DEF_LIB_BUILTIN, except that the function is only a part of the standard in C99 or above.
Builtin that is specified by C99 and C90 reserve the name for future use. We can still recognize the builtin in C90 mode but we can't produce it implicitly.
Builtin that is specified by C99 and C90 reserve the name for future use. We can still recognize the builtin in C90 mode but we can't produce it implicitly.
Like DEF_C99_BUILTIN, but for complex math functions.
Like DEF_C99_BUILTIN, but for complex math functions.
Builtins used in implementing coroutine support.
Builtins used in implementing coroutine support.
Builtin that C99 reserve the name for future use. We can still recognize the builtin in C99 mode but we can't produce it implicitly.
Builtin that C99 reserve the name for future use. We can still recognize the builtin in C99 mode but we can't produce it implicitly.
Like DEF_LIB_BUILTIN, except that the function is not one that is specified by ANSI/ISO C. So, when we're being fully conformant we ignore the version of these builtins that does not begin with __builtin.
Like DEF_LIB_BUILTIN, except that the function is not one that is specified by ANSI/ISO C. So, when we're being fully conformant we ignore the version of these builtins that does not begin with __builtin.
A set of GCC builtins for _FloatN and _FloatNx types. TYPE_MACRO is called with an argument such as FLOAT32 to produce the enum value for the type. If we are compiling for the C language with GNU extensions, we enable the name without the __builtin_ prefix as well as the name with the __builtin_ prefix. C++ does not enable these names by default because a class based library should use the __builtin_ names.
A set of GCC builtins for _FloatN and _FloatNx types. TYPE_MACRO is called with an argument such as FLOAT32 to produce the enum value for the type. If we are compiling for the C language with GNU extensions, we enable the name without the __builtin_ prefix as well as the name with the __builtin_ prefix. C++ does not enable these names by default because a class based library should use the __builtin_ names.
This file contains the definitions and documentation for the builtins used in the GNU compiler. Copyright (C) 2000-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Before including this file, you should define a macro: DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) This macro will be called once for each builtin function. The ENUM will be of type `enum built_in_function', and will indicate which builtin function is being processed. The NAME of the builtin function (which will always start with `__builtin_') is a string literal. The CLASS is of type `enum built_in_class' and indicates what kind of builtin is being processed. Some builtins are actually two separate functions. For example, for `strcmp' there are two builtin functions; `__builtin_strcmp' and `strcmp' itself. Both behave identically. Other builtins define only the `__builtin' variant. If BOTH_P is TRUE, then this builtin has both variants; otherwise, it is has only the first variant. TYPE indicates the type of the function. The symbols correspond to enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE should be ignored. If FALLBACK_P is true then, if for some reason, the compiler cannot expand the builtin function directly, it will call the corresponding library function (which does not have the `__builtin_' prefix. If NONANSI_P is true, then the non-`__builtin_' variant is not an ANSI/ISO library function, and so we should pretend it does not exist when compiling in ANSI conformant mode. ATTRs is an attribute list as defined in builtin-attrs.def that describes the attributes of this builtin function. IMPLICIT specifies condition when the builtin can be produced by compiler. For instance C90 reserves floorf function, but does not define it's meaning. When user uses floorf we may assume that the floorf has the meaning we expect, but we can't produce floorf by simplifying floor((double)float) since the runtime need not implement it. The builtins is registered only if COND is true.
A GCC builtin (like __builtin_saveregs) is provided by the compiler, but does not correspond to a function in the standard library.
This file contains the definitions and documentation for the builtins used in the GNU compiler. Copyright (C) 2000-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Before including this file, you should define a macro: DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) This macro will be called once for each builtin function. The ENUM will be of type `enum built_in_function', and will indicate which builtin function is being processed. The NAME of the builtin function (which will always start with `__builtin_') is a string literal. The CLASS is of type `enum built_in_class' and indicates what kind of builtin is being processed. Some builtins are actually two separate functions. For example, for `strcmp' there are two builtin functions; `__builtin_strcmp' and `strcmp' itself. Both behave identically. Other builtins define only the `__builtin' variant. If BOTH_P is TRUE, then this builtin has both variants; otherwise, it is has only the first variant. TYPE indicates the type of the function. The symbols correspond to enumerals from builtin-types.def. If BOTH_P is true, then LIBTYPE is the type of the non-`__builtin_' variant. Otherwise, LIBTYPE should be ignored. If FALLBACK_P is true then, if for some reason, the compiler cannot expand the builtin function directly, it will call the corresponding library function (which does not have the `__builtin_' prefix. If NONANSI_P is true, then the non-`__builtin_' variant is not an ANSI/ISO library function, and so we should pretend it does not exist when compiling in ANSI conformant mode. ATTRs is an attribute list as defined in builtin-attrs.def that describes the attributes of this builtin function. IMPLICIT specifies condition when the builtin can be produced by compiler. For instance C90 reserves floorf function, but does not define it's meaning. When user uses floorf we may assume that the floorf has the meaning we expect, but we can't produce floorf by simplifying floor((double)float) since the runtime need not implement it. The builtins is registered only if COND is true.
A GCC builtin (like __builtin_saveregs) is provided by the compiler, but does not correspond to a function in the standard library.
A set of GCC builtins for _FloatN and _FloatNx types. TYPE_MACRO is called with an argument such as FLOAT32 to produce the enum value for the type.
A set of GCC builtins for _FloatN and _FloatNx types. TYPE_MACRO is called with an argument such as FLOAT32 to produce the enum value for the type.
Builtin used by the implementation of OpenACC and OpenMP. Few of these are actually implemented in the compiler; most are in libgomp.
Builtin used by the implementation of OpenACC and OpenMP. Few of these are actually implemented in the compiler; most are in libgomp.
#define DEF_INTERNAL_COND_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_COND_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_FLT_FLOATN_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_FLT_FLOATN_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_FLT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_FLT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_FN | ( | CODE, | |
FLAGS, | |||
FNSPEC ) |
#define DEF_INTERNAL_FN | ( | CODE, | |
FLAGS, | |||
FNSPEC ) |
#define DEF_INTERNAL_INT_EXT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_INT_EXT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_INT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_INT_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
Internal functions. Copyright (C) 2011-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
This file specifies a list of internal "functions". These functions differ from built-in functions in that they have no linkage and cannot be called directly by the user. They represent operations that are only synthesised by GCC itself. Internal functions are used instead of tree codes if the operation and its operands are more naturally represented as a GIMPLE_CALL than a GIMPLE_ASSIGN. Each entry in this file has one of the forms: DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC) DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_FLT_FLOATN_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_INT_EXT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_COND_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_SIGNED_COND_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_WIDENING_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) where NAME is the name of the function, FLAGS is a set of ECF_* flags and FNSPEC is a string describing functions fnspec. DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a direct optab. The function should only be called with a given set of types if the associated optab is available for the modes of those types. OPTAB says what optab to use (without the trailing "_optab") and TYPE categorizes the optab based on its inputs and outputs. The possible types of optab are: - mask_load: currently just maskload - load_lanes: currently just vec_load_lanes - mask_load_lanes: currently just vec_mask_load_lanes - mask_len_load_lanes: currently just vec_mask_len_load_lanes - gather_load: used for {mask_,mask_len_,}gather_load - strided_load: currently just mask_len_strided_load - len_load: currently just len_load - mask_len_load: currently just mask_len_load - mask_store: currently just maskstore - store_lanes: currently just vec_store_lanes - mask_store_lanes: currently just vec_mask_store_lanes - mask_len_store_lanes: currently just vec_mask_len_store_lanes - scatter_store: used for {mask_,mask_len_,}scatter_store - strided_store: currently just mask_len_strided_store - len_store: currently just len_store - mask_len_store: currently just mask_len_store - unary: a normal unary optab, such as vec_reverse_<mode> - binary: a normal binary optab, such as vec_interleave_lo_<mode> - ternary: a normal ternary optab, such as fma<mode>4 - unary_convert: a single-input conversion optab, such as lround<srcmode><dstmode>2. - cond_binary: a conditional binary optab, such as cond_add<mode> - cond_unary: a conditional unary optab, such as cond_neg<mode> - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode> - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode - check_ptrs: used for check_{raw,war}_ptrs - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode> - cond_len_binary: a conditional binary optab, such as cond_len_add<mode> - cond_len_ternary: a conditional ternary optab, such as cond_len_fma_rev<mode> DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that maps to one of two optabs, depending on the signedness of an input. SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and unsigned inputs respectively, both without the trailing "_optab". SELECTOR says which type in the tree_pair determines the signedness. DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition, the function implements the computational part of a built-in math function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions, these internal functions never set errno. DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX} group of functions to any integral mode (including vector modes). DEF_INTERNAL_INT_EXT_FN is like DEF_INTERNAL_INT_FN, except that it has expand_##NAME defined in internal-fn.cc to override the DEF_INTERNAL_INT_FN expansion behavior. DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal functions with DEF_INTERNAL_SIGNED_OPTAB_FN: - one that describes a widening operation with the same number of elements in the output and input vectors, - two that describe a pair of high-low widening operations where the output vectors each have half the number of elements of the input vectors, corresponding to the result of the widening operation on the top half and bottom half, these have the suffixes _HI and _LO, - and two that describe a pair of even-odd widening operations where the output vectors each have half the number of elements of the input vectors, corresponding to the result of the widening operation on the even and odd elements, these have the suffixes _EVEN and _ODD. These five internal functions will require two optabs each, a SIGNED_OPTAB and an UNSIGNED_OTPAB. DEF_INTERNAL_COND_FN is a wrapper that defines 2 internal functions with DEF_INTERNAL_OPTAB_FN: - One is COND_* operations that are predicated by mask only. Such operations make sense for both vectors and scalars. - The other is COND_LEN_* operations that are predicated by mask and len both. Such operations only make sense for vectors. DEF_INTERNAL_SIGNED_COND_FN is like DEF_INTERNAL_COND_FN but defines intenal functions with DEF_INTERNAL_SIGNED_OPTAB_FN. Each entry must have a corresponding expander of the form: void expand_NAME (gimple_call stmt) where STMT is the statement that performs the call. These are generated automatically for optab functions and call out to a function or macro called expand_<TYPE>_optab_fn.
#define DEF_INTERNAL_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
OPTAB, | |||
TYPE ) |
Internal functions. Copyright (C) 2011-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
This file specifies a list of internal "functions". These functions differ from built-in functions in that they have no linkage and cannot be called directly by the user. They represent operations that are only synthesised by GCC itself. Internal functions are used instead of tree codes if the operation and its operands are more naturally represented as a GIMPLE_CALL than a GIMPLE_ASSIGN. Each entry in this file has one of the forms: DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC) DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB, UNSIGNED_OPTAB, TYPE) DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_FLT_FLOATN_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_INT_EXT_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_COND_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_SIGNED_COND_FN (NAME, FLAGS, OPTAB, TYPE) DEF_INTERNAL_WIDENING_OPTAB_FN (NAME, FLAGS, SELECTOR, SOPTAB, UOPTAB, TYPE) where NAME is the name of the function, FLAGS is a set of ECF_* flags and FNSPEC is a string describing functions fnspec. DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a direct optab. The function should only be called with a given set of types if the associated optab is available for the modes of those types. OPTAB says what optab to use (without the trailing "_optab") and TYPE categorizes the optab based on its inputs and outputs. The possible types of optab are: - mask_load: currently just maskload - load_lanes: currently just vec_load_lanes - mask_load_lanes: currently just vec_mask_load_lanes - mask_len_load_lanes: currently just vec_mask_len_load_lanes - gather_load: used for {mask_,mask_len_,}gather_load - strided_load: currently just mask_len_strided_load - len_load: currently just len_load - mask_len_load: currently just mask_len_load - mask_store: currently just maskstore - store_lanes: currently just vec_store_lanes - mask_store_lanes: currently just vec_mask_store_lanes - mask_len_store_lanes: currently just vec_mask_len_store_lanes - scatter_store: used for {mask_,mask_len_,}scatter_store - strided_store: currently just mask_len_strided_store - len_store: currently just len_store - mask_len_store: currently just mask_len_store - unary: a normal unary optab, such as vec_reverse_<mode> - binary: a normal binary optab, such as vec_interleave_lo_<mode> - ternary: a normal ternary optab, such as fma<mode>4 - unary_convert: a single-input conversion optab, such as lround<srcmode><dstmode>2. - cond_binary: a conditional binary optab, such as cond_add<mode> - cond_unary: a conditional unary optab, such as cond_neg<mode> - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode> - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode - check_ptrs: used for check_{raw,war}_ptrs - cond_len_unary: a conditional unary optab, such as cond_len_neg<mode> - cond_len_binary: a conditional binary optab, such as cond_len_add<mode> - cond_len_ternary: a conditional ternary optab, such as cond_len_fma_rev<mode> DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that maps to one of two optabs, depending on the signedness of an input. SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and unsigned inputs respectively, both without the trailing "_optab". SELECTOR says which type in the tree_pair determines the signedness. DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition, the function implements the computational part of a built-in math function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions, these internal functions never set errno. DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX} group of functions to any integral mode (including vector modes). DEF_INTERNAL_INT_EXT_FN is like DEF_INTERNAL_INT_FN, except that it has expand_##NAME defined in internal-fn.cc to override the DEF_INTERNAL_INT_FN expansion behavior. DEF_INTERNAL_WIDENING_OPTAB_FN is a wrapper that defines five internal functions with DEF_INTERNAL_SIGNED_OPTAB_FN: - one that describes a widening operation with the same number of elements in the output and input vectors, - two that describe a pair of high-low widening operations where the output vectors each have half the number of elements of the input vectors, corresponding to the result of the widening operation on the top half and bottom half, these have the suffixes _HI and _LO, - and two that describe a pair of even-odd widening operations where the output vectors each have half the number of elements of the input vectors, corresponding to the result of the widening operation on the even and odd elements, these have the suffixes _EVEN and _ODD. These five internal functions will require two optabs each, a SIGNED_OPTAB and an UNSIGNED_OTPAB. DEF_INTERNAL_COND_FN is a wrapper that defines 2 internal functions with DEF_INTERNAL_OPTAB_FN: - One is COND_* operations that are predicated by mask only. Such operations make sense for both vectors and scalars. - The other is COND_LEN_* operations that are predicated by mask and len both. Such operations only make sense for vectors. DEF_INTERNAL_SIGNED_COND_FN is like DEF_INTERNAL_COND_FN but defines intenal functions with DEF_INTERNAL_SIGNED_OPTAB_FN. Each entry must have a corresponding expander of the form: void expand_NAME (gimple_call stmt) where STMT is the statement that performs the call. These are generated automatically for optab functions and call out to a function or macro called expand_<TYPE>_optab_fn.
#define DEF_INTERNAL_SIGNED_COND_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SIGNED_OPTAB, | |||
UNSIGNED_OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_SIGNED_COND_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SIGNED_OPTAB, | |||
UNSIGNED_OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_SIGNED_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SIGNED_OPTAB, | |||
UNSIGNED_OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_SIGNED_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SIGNED_OPTAB, | |||
UNSIGNED_OPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_WIDENING_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SOPTAB, | |||
UOPTAB, | |||
TYPE ) |
#define DEF_INTERNAL_WIDENING_OPTAB_FN | ( | NAME, | |
FLAGS, | |||
SELECTOR, | |||
SOPTAB, | |||
UOPTAB, | |||
TYPE ) |
A library builtin (like __builtin_strchr) is a builtin equivalent of an ANSI/ISO standard library function. In addition to the `__builtin' version, we will create an ordinary version (e.g, `strchr') as well. If we cannot compute the answer using the builtin function, we will fall back to the standard library version.
A library builtin (like __builtin_strchr) is a builtin equivalent of an ANSI/ISO standard library function. In addition to the `__builtin' version, we will create an ordinary version (e.g, `strchr') as well. If we cannot compute the answer using the builtin function, we will fall back to the standard library version.
Builtin used by the implementation of libsanitizer. These functions are mapped to the actual implementation of the libtsan library.
Builtin used by the implementation of libsanitizer. These functions are mapped to the actual implementation of the libtsan library.
Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".
Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".
Builtin used by the implementation of GNU TM. These functions are mapped to the actual implementation of the STM library.
Builtin used by the implementation of GNU TM. These functions are mapped to the actual implementation of the STM library.
#define DEFTREECODE | ( | SYM, | |
STRING, | |||
TYPE, | |||
NARGS ) |
Codes of tree nodes.
#define EAF_NO_DIRECT_CLOBBER (1 << 2) |
Following flags come in pairs. First one is about direct dereferences from the parameter, while the second is about memory reachable by recursive dereferences.
Nonzero if memory reached by the argument is not clobbered.
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), interposable_eaf_flags(), and sra_modify_call_arg().
#define EAF_NO_DIRECT_ESCAPE (1 << 4) |
Nonzero if the argument does not escape.
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), handle_rhs_call(), and interposable_eaf_flags().
#define EAF_NO_DIRECT_READ (1 << 8) |
Nonzero if the argument is not read.
Referenced by handle_call_arg(), interposable_eaf_flags(), maybe_warn_pass_by_reference(), and ref_maybe_used_by_call_p_1().
#define EAF_NO_INDIRECT_CLOBBER (1 << 3) |
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), and interposable_eaf_flags().
#define EAF_NO_INDIRECT_ESCAPE (1 << 5) |
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), and interposable_eaf_flags().
#define EAF_NO_INDIRECT_READ (1 << 9) |
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), and interposable_eaf_flags().
#define EAF_NOT_RETURNED_DIRECTLY (1 << 6) |
Nonzero if the argument does not escape to return value.
Referenced by handle_call_arg(), handle_rhs_call(), interposable_eaf_flags(), remove_useless_eaf_flags(), and scan_function().
#define EAF_NOT_RETURNED_INDIRECTLY (1 << 7) |
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), interposable_eaf_flags(), and remove_useless_eaf_flags().
#define EAF_UNUSED (1 << 1) |
Call argument flags.
Nonzero if the argument is not used by the function.
Referenced by attr_fnspec::arg_eaf_flags(), handle_call_arg(), handle_rhs_call(), interposable_eaf_flags(), maybe_warn_pass_by_reference(), ref_maybe_used_by_call_p_1(), and sra_modify_call_arg().
#define ECF_BY_DESCRIPTOR (1 << 14) |
Nonzero if this is an indirect call by descriptor.
Referenced by call_expr_flags(), expand_call(), gimple_call_flags(), and prepare_call_address().
#define ECF_COLD (1 << 15) |
Nonzero if this is a cold function.
Referenced by build_common_builtin_nodes(), flags_from_decl_or_type(), and set_call_expr_flags().
#define ECF_CONST (1 << 0) |
Nonzero if this is a call to a function whose return value depends solely on its arguments, has no side effects, and does not read global memory. This corresponds to TREE_READONLY for function decls.
Referenced by auto_simd_check_stmt(), build_common_builtin_nodes(), call_may_clobber_ref_p_1(), check_stmt_for_type_change(), cleanup_call_ctrl_altering_flag(), compute_avail(), compute_points_to_sets(), decl_maybe_in_construction_p(), dse_optimize_call(), emit_call_1(), emit_library_call_value_1(), execute_fixup_cfg(), expand_builtin(), expand_call(), expr_hash_elt::expr_hash_elt(), find_always_executed_bbs(), find_func_aliases_for_call(), find_obviously_necessary_stmts(), finite_loop_p(), flags_from_decl_or_type(), ccp_folder::fold_stmt(), function_and_variable_visibility(), gather_memory_references(), get_read_write_all_from_node(), get_references_in_stmt(), gimple_call_reset_alias_info(), gimple_has_side_effects(), gimple_regimplify_operands(), gimplify_call_expr(), gsi_replace_with_seq_vops(), if_convertible_stmt_p(), initialize_argument_information(), input_edge(), ipa_merge_modref_summary_after_inlining(), ipa_modref_callee_reads_no_memory_p(), ipa_pta_execute(), is_removable_cxa_atexit_call(), is_tm_pure_call(), lto_output_edge(), operands_scanner::maybe_add_call_vops(), maybe_push_res_to_seq(), maybe_warn_pass_by_reference(), nonbarrier_call_p(), operand_compare::operand_equal_p(), param_type_may_change_p(), polymorphic_ctor_dtor_p(), process_call_operands(), propagate(), propagate_bits(), pure_const_read_summary(), read_write_all_from_decl(), ref_maybe_used_by_call_p_1(), remove_useless_eaf_flags(), set_call_expr_flags(), should_duplicate_loop_header_p(), speculation_useful_p(), state_from_flags(), statement_sink_location(), stmt_can_terminate_bb_p(), stmt_may_terminate_function_p(), tree_estimate_loop_size(), modref_summary::useful_p(), modref_summary_lto::useful_p(), vect_finish_stmt_generation(), visit_reference_op_call(), visit_stmt(), and will_be_nonconstant_predicate().
#define ECF_LEAF (1 << 10) |
The function does not lead to calls within current function unit.
Referenced by build_common_builtin_nodes(), build_cxa_atexit_decl(), call_can_make_abnormal_goto(), cleanup_call_ctrl_altering_flag(), flags_from_decl_or_type(), ignore_edge_p(), ipa_reference_get_read_global(), ipa_reference_get_written_global(), lto_output_edge(), nonfreeing_call_p(), propagate_bits(), read_write_all_from_decl(), and set_call_expr_flags().
#define ECF_LOOPING_CONST_OR_PURE (1 << 2) |
Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no infinite loop. This corresponds to DECL_LOOPING_CONST_OR_PURE_P for function decls.
Referenced by call_may_clobber_ref_p_1(), cleanup_call_ctrl_altering_flag(), compute_avail(), dse_optimize_call(), emit_call_1(), emit_library_call_value_1(), execute_fixup_cfg(), expand_builtin(), expand_call(), find_always_executed_bbs(), find_func_aliases_for_call(), find_obviously_necessary_stmts(), finite_loop_p(), flags_from_decl_or_type(), ccp_folder::fold_stmt(), function_and_variable_visibility(), gimple_has_side_effects(), gimple_regimplify_operands(), gimplify_call_expr(), if_convertible_stmt_p(), initialize_argument_information(), ipa_merge_modref_summary_after_inlining(), is_removable_cxa_atexit_call(), lto_output_edge(), process_call_operands(), set_call_expr_flags(), state_from_flags(), statement_sink_location(), stmt_can_terminate_bb_p(), stmt_may_terminate_function_p(), modref_summary::useful_p(), and modref_summary_lto::useful_p().
#define ECF_MALLOC (1 << 4) |
Nonzero if this is a call to malloc or a related function.
Referenced by build_common_builtin_nodes(), execute_split_functions(), expand_call(), flags_from_decl_or_type(), gimple_call_return_flags(), input_edge(), lto_output_edge(), set_call_expr_flags(), and thread_private_new_memory().
#define ECF_MAY_BE_ALLOCA (1 << 5) |
Nonzero if it is plausible that this is a call to alloca.
Referenced by expand_call(), gimple_maybe_alloca_call_p(), lto_output_edge(), notice_special_calls(), special_function_p(), and store_one_arg().
#define ECF_NORETURN (1 << 3) |
Nonzero if this call will never return.
Referenced by block_may_fallthru(), build_common_builtin_nodes(), can_implement_as_sibling_call_p(), cgraph_edge::cannot_lead_to_return_p(), cgraph_node::cannot_return_p(), check_call(), cleanup_call_ctrl_altering_flag(), compute_function_frequency(), determine_unlikely_bbs(), dse_optimize_call(), emit_call_1(), emit_library_call_value_1(), execute_fixup_cfg(), execute_split_functions(), expand_call(), flags_from_decl_or_type(), gimple_build_eh_must_not_throw(), gimple_call_initialize_ctrl_altering(), gimple_call_noreturn_p(), gimple_ic(), gsi_replace_with_seq_vops(), input_edge(), is_removable_cxa_atexit_call(), likely_target_p(), lower_stmt(), lto_output_edge(), remove_useless_eaf_flags(), set_call_expr_flags(), and stmt_can_terminate_bb_p().
#define ECF_NOTHROW (1 << 6) |
Nonzero if this is a call to a function that won't throw an exception.
Referenced by build_common_builtin_nodes(), build_cxa_atexit_decl(), cgraph_edge::cannot_lead_to_return_p(), cgraph_node::cannot_return_p(), check_call(), emit_library_call_value_1(), expand_call(), flags_from_decl_or_type(), gimple_call_flags(), gimple_call_nothrow_p(), input_edge(), lto_output_edge(), make_reg_eh_region_note(), propagate_nothrow(), pure_const_read_summary(), set_call_expr_flags(), stmt_can_terminate_bb_p(), and tree_could_throw_p().
#define ECF_NOVOPS (1 << 9) |
Function does not read or write memory (but may have side effects, so it does not necessarily fit ECF_CONST).
Referenced by call_may_clobber_ref_p_1(), compute_points_to_sets(), dse_optimize_call(), find_func_aliases_for_call(), flags_from_decl_or_type(), gimple_call_reset_alias_info(), gsi_replace_with_seq_vops(), ipa_merge_modref_summary_after_inlining(), ipa_pta_execute(), lto_output_edge(), operands_scanner::maybe_add_call_vops(), ref_maybe_used_by_call_p_1(), remove_useless_eaf_flags(), set_call_expr_flags(), modref_summary_lto::useful_p(), and vect_finish_stmt_generation().
#define ECF_PURE (1 << 1) |
Nonzero if this is a call to "pure" function (like const function, but may read memory. This corresponds to DECL_PURE_P for function decls.
Referenced by auto_simd_check_stmt(), build_common_builtin_nodes(), call_may_clobber_ref_p_1(), check_stmt_for_type_change(), cleanup_call_ctrl_altering_flag(), compute_avail(), compute_points_to_sets(), decl_maybe_in_construction_p(), dse_optimize_call(), emit_call_1(), emit_library_call_value_1(), execute_fixup_cfg(), expand_builtin(), expand_call(), expr_hash_elt::expr_hash_elt(), find_always_executed_bbs(), find_func_aliases_for_call(), find_obviously_necessary_stmts(), finite_loop_p(), flags_from_decl_or_type(), ccp_folder::fold_stmt(), function_and_variable_visibility(), get_read_write_all_from_node(), gimple_call_reset_alias_info(), gimple_has_side_effects(), gimple_regimplify_operands(), gimplify_call_expr(), gsi_replace_with_seq_vops(), initialize_argument_information(), input_edge(), ipa_merge_modref_summary_after_inlining(), ipa_pta_execute(), is_removable_cxa_atexit_call(), lto_output_edge(), operands_scanner::maybe_add_call_vops(), nonbarrier_call_p(), operand_compare::operand_equal_p(), param_type_may_change_p(), polymorphic_ctor_dtor_p(), process_call_operands(), propagate(), propagate_bits(), pure_const_read_summary(), read_write_all_from_decl(), remove_useless_eaf_flags(), set_call_expr_flags(), speculation_useful_p(), state_from_flags(), statement_sink_location(), stmt_can_terminate_bb_p(), stmt_may_terminate_function_p(), tree_estimate_loop_size(), modref_summary::useful_p(), modref_summary_lto::useful_p(), vect_finish_stmt_generation(), visit_reference_op_call(), and visit_stmt().
#define ECF_RET1 (1 << 11) |
Nonzero if this call returns its first argument.
Referenced by set_call_expr_flags().
#define ECF_RETURNS_TWICE (1 << 7) |
Nonzero if this is a call to setjmp or a related function.
Referenced by branch_prob(), build_access_from_call_arg(), build_and_add_sum(), can_implement_as_sibling_call_p(), determine_max_movement(), edge_before_returns_twice_call(), emit_call_1(), emit_library_call_value_1(), execute_split_functions(), flags_from_decl_or_type(), gimple_can_duplicate_bb_p(), gimple_verify_flow_info(), gimplify_call_expr(), gimplify_modify_expr(), gsi_safe_insert_before(), gsi_safe_insert_seq_before(), input_edge(), lto_output_edge(), make_edges(), notice_special_calls(), set_call_expr_flags(), setjmp_call_p(), special_function_p(), statement_sink_location(), stmt_can_terminate_bb_p(), stmt_starts_bb_p(), and vect_slp_function().
#define ECF_SIBCALL (1 << 8) |
Nonzero if this call replaces the current stack frame.
Referenced by emit_call_1(), expand_call(), load_register_parameters(), lto_output_edge(), prepare_call_address(), and store_one_arg().
#define ECF_TM_BUILTIN (1 << 13) |
Nonzero if this call is into the transaction runtime library.
Referenced by diagnose_tm_1(), expand_block_edges(), flags_from_decl_or_type(), gimple_call_initialize_ctrl_altering(), ipa_tm_mayenterirr_function(), and ipa_tm_transform_calls_redirect().
#define ECF_TM_PURE (1 << 12) |
Nonzero if this call does not affect transactions.
Referenced by build_common_builtin_nodes(), flags_from_decl_or_type(), ipa_tm_mayenterirr_function(), is_tm_pure(), is_tm_pure_call(), and set_call_expr_flags().
#define ECF_XTHROW (1 << 16) |
Nonzero if this is a function expected to end with an exception.
Referenced by build_common_builtin_nodes(), flags_from_decl_or_type(), gimple_build_call_from_tree(), gimple_call_expected_throw_p(), gimple_call_flags(), and set_call_expr_flags().
#define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, |
#define ERF_NOALIAS (1 << 3) |
Nonzero if the return value does not alias with anything. Functions with the malloc attribute have this set on their return value.
Referenced by decl_return_flags(), find_func_aliases_for_builtin_call(), gimple_call_return_flags(), handle_lhs_call(), and visit_stmt().
#define ERF_RETURN_ARG_MASK (3) |
Call return flags.
Mask for the argument number that is returned. Lower two bits of the return flags, encodes argument slots zero to three.
Referenced by decompose_param_expr(), evaluate_stmt(), expand_call(), find_tail_calls(), gimple_call_nonnull_arg(), handle_lhs_call(), and pass_through_call().
#define ERF_RETURNS_ARG (1 << 2) |
Nonzero if the return value is equal to the argument number flags & ERF_RETURN_ARG_MASK.
Referenced by decl_return_flags(), decompose_param_expr(), evaluate_stmt(), expand_call(), find_tail_calls(), gimple_call_nonnull_arg(), gimple_call_return_flags(), handle_lhs_call(), and pass_through_call().
#define FABS_TYPE | ( | F | ) |
#define FABS_TYPE | ( | F | ) |
#define FDIM_TYPE | ( | F | ) |
#define FDIM_TYPE | ( | F | ) |
#define FLOOR_TYPE | ( | F | ) |
#define FLOOR_TYPE | ( | F | ) |
#define FMA_TYPE | ( | F | ) |
#define FMA_TYPE | ( | F | ) |
#define FMAX_TYPE | ( | F | ) |
#define FMAX_TYPE | ( | F | ) |
#define FMIN_TYPE | ( | F | ) |
#define FMIN_TYPE | ( | F | ) |
#define FREXP_TYPE | ( | F | ) |
#define FREXP_TYPE | ( | F | ) |
#define HUGE_VAL_TYPE | ( | F | ) |
#define HUGE_VAL_TYPE | ( | F | ) |
#define HYPOT_TYPE | ( | F | ) |
#define HYPOT_TYPE | ( | F | ) |
#define ILOGB_TYPE | ( | F | ) |
#define ILOGB_TYPE | ( | F | ) |
#define INF_TYPE | ( | F | ) |
#define INF_TYPE | ( | F | ) |
#define LDEXP_TYPE | ( | F | ) |
#define LDEXP_TYPE | ( | F | ) |
#define LGAMMA_TYPE | ( | F | ) |
#define LGAMMA_TYPE | ( | F | ) |
#define LLRINT_TYPE | ( | F | ) |
#define LLRINT_TYPE | ( | F | ) |
#define LOG10_TYPE | ( | F | ) |
#define LOG10_TYPE | ( | F | ) |
#define LRINT_TYPE | ( | F | ) |
#define LRINT_TYPE | ( | F | ) |
#define MODF_TYPE | ( | F | ) |
#define MODF_TYPE | ( | F | ) |
#define NAN_TYPE | ( | F | ) |
#define NAN_TYPE | ( | F | ) |
#define NEARBYINT_TYPE | ( | F | ) |
#define NEARBYINT_TYPE | ( | F | ) |
#define NEXTAFTER_TYPE | ( | F | ) |
#define NEXTAFTER_TYPE | ( | F | ) |
#define NUM_FLOATN_NX_TYPES |
Referenced by build_common_tree_nodes(), and long_double_as_float128().
#define NUM_FLOATN_TYPES |
#define NUM_FLOATNX_TYPES |
#define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE) |
Number of language-independent tree codes.
Referenced by is_lang_specific(), maybe_lvalue_p(), print_lto_report(), and tree_code_size().
#define OMP_FAIL_MEMORY_ORDER_SHIFT 3 |
#define REMQUO_TYPE | ( | F | ) |
#define REMQUO_TYPE | ( | F | ) |
#define RINT_TYPE | ( | F | ) |
#define RINT_TYPE | ( | F | ) |
#define ROUND_TYPE | ( | F | ) |
#define ROUND_TYPE | ( | F | ) |
#define ROUNDEVEN_TYPE | ( | F | ) |
#define ROUNDEVEN_TYPE | ( | F | ) |
#define SCALBLN_TYPE | ( | F | ) |
#define SCALBLN_TYPE | ( | F | ) |
#define SCALBN_TYPE | ( | F | ) |
#define SCALBN_TYPE | ( | F | ) |
#define SINH_TYPE | ( | F | ) |
#define SINH_TYPE | ( | F | ) |
#define SQRT_TYPE | ( | F | ) |
#define SQRT_TYPE | ( | F | ) |
#define TRUNC_TYPE | ( | F | ) |
#define TRUNC_TYPE | ( | F | ) |
typedef unsigned short priority_type |
An initialization priority.
The type of a callback function for walking over tree structure.
typedef tree(* walk_tree_lh) (tree *, int *, tree(*)(tree *, int *, void *), void *, hash_set< tree > *) |
The type of a callback function that represents a custom walk_tree.
enum annot_expr_kind |
enum attribute_flags |
enum built_in_class |
enum built_in_function |
enum clobber_kind |
enum combined_fn |
An enum that combines target-independent built-in functions with internal functions, so that they can be treated in a similar way. The numbers for built-in functions are the same as for the built_in_function enum. The numbers for internal functions start at END_BUITLINS.
enum cv_qualifier |
enum integer_type_kind |
An enumeration of the standard C integer types. These must be ordered so that shorter types appear before longer ones, and so that signed types appear before unsigned ones, for the correct functioning of interpret_integer() in c-lex.cc.
enum internal_fn |
enum omp_clause_bind_kind |
enum omp_clause_code |
OMP_CLAUSE codes. Do not reorder, as this is used to index into the tables omp_clause_num_ops and omp_clause_code_name. Note additionally that there are various range checks such as for OMP_CLAUSE_SIZE or OMP_CLAUSE_DECL; clauses having those shall be inside that range, those that have not shall be outside.
enum omp_memory_order |
memory-order-clause on OpenMP atomic/flush constructs or argument of atomic_default_mem_order clause.
enum operand_equal_flag |
A pointer-to-function member type looks like: struct { __P __pfn; ptrdiff_t __delta; }; If __pfn is NULL, it is a NULL pointer-to-member-function. (Because the vtable is always the first thing in the object, we don't need its offset.) If the function is virtual, then PFN is one plus twice the index into the vtable; otherwise, it is just a pointer to the function. Unfortunately, using the lowest bit of PFN doesn't work in architectures that don't impose alignment requirements on function addresses, or that use the lowest bit to tell one ISA from another, for example. For such architectures, we use the lowest bit of DELTA instead of the lowest bit of the PFN, and DELTA will be multiplied by 2.
Enumerator | |
---|---|
ptrmemfunc_vbit_in_pfn | |
ptrmemfunc_vbit_in_delta |
enum size_type_kind |
enum tree_code |
enum tree_code_class |
enum tree_index : unsigned |
Standard named or nameless data types of the C compiler.
enum tree_node_kind |