/* GCC core type declarations.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Copyright (C) 2002-2020 Free Software Foundation, Inc.
This file is part of GCC.
#ifndef USED_FOR_TARGET
-typedef HOST_WIDEST_INT gcov_type;
-typedef unsigned HOST_WIDEST_INT gcov_type_unsigned;
+typedef int64_t gcov_type;
+typedef uint64_t gcov_type_unsigned;
-struct bitmap_head;
-typedef struct bitmap_head *bitmap;
-typedef const struct bitmap_head *const_bitmap;
+struct bitmap_obstack;
+class bitmap_head;
+typedef class bitmap_head *bitmap;
+typedef const class bitmap_head *const_bitmap;
struct simple_bitmap_def;
typedef struct simple_bitmap_def *sbitmap;
typedef const struct simple_bitmap_def *const_sbitmap;
struct rtx_def;
typedef struct rtx_def *rtx;
typedef const struct rtx_def *const_rtx;
+class scalar_mode;
+class scalar_int_mode;
+class scalar_float_mode;
+class complex_mode;
+class fixed_size_mode;
+template<typename> class opt_mode;
+typedef opt_mode<scalar_mode> opt_scalar_mode;
+typedef opt_mode<scalar_int_mode> opt_scalar_int_mode;
+typedef opt_mode<scalar_float_mode> opt_scalar_float_mode;
+template<typename> struct pod_mode;
+typedef pod_mode<scalar_mode> scalar_mode_pod;
+typedef pod_mode<scalar_int_mode> scalar_int_mode_pod;
+typedef pod_mode<fixed_size_mode> fixed_size_mode_pod;
+
+/* Subclasses of rtx_def, using indentation to show the class
+ hierarchy, along with the relevant invariant.
+ Where possible, keep this list in the same order as in rtl.def. */
+struct rtx_def;
+ struct rtx_expr_list; /* GET_CODE (X) == EXPR_LIST */
+ struct rtx_insn_list; /* GET_CODE (X) == INSN_LIST */
+ struct rtx_sequence; /* GET_CODE (X) == SEQUENCE */
+ struct rtx_insn;
+ struct rtx_debug_insn; /* DEBUG_INSN_P (X) */
+ struct rtx_nonjump_insn; /* NONJUMP_INSN_P (X) */
+ struct rtx_jump_insn; /* JUMP_P (X) */
+ struct rtx_call_insn; /* CALL_P (X) */
+ struct rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
+ struct rtx_barrier; /* BARRIER_P (X) */
+ struct rtx_code_label; /* LABEL_P (X) */
+ struct rtx_note; /* NOTE_P (X) */
+
struct rtvec_def;
typedef struct rtvec_def *rtvec;
typedef const struct rtvec_def *const_rtvec;
+struct hwivec_def;
+typedef struct hwivec_def *hwivec;
+typedef const struct hwivec_def *const_hwivec;
union tree_node;
typedef union tree_node *tree;
typedef const union tree_node *const_tree;
-typedef struct gimple_statement_base *gimple;
-typedef const struct gimple_statement_base *const_gimple;
-typedef gimple gimple_seq;
+struct gimple;
+typedef gimple *gimple_seq;
struct gimple_stmt_iterator;
+
+/* Forward decls for leaf gimple subclasses (for individual gimple codes).
+ Keep this in the same order as the corresponding codes in gimple.def. */
+
+struct gcond;
+struct gdebug;
+struct ggoto;
+struct glabel;
+struct gswitch;
+struct gassign;
+struct gasm;
+struct gcall;
+struct gtransaction;
+struct greturn;
+struct gbind;
+struct gcatch;
+struct geh_filter;
+struct geh_mnt;
+struct geh_else;
+struct gresx;
+struct geh_dispatch;
+struct gphi;
+struct gtry;
+struct gomp_atomic_load;
+struct gomp_atomic_store;
+struct gomp_continue;
+struct gomp_critical;
+struct gomp_ordered;
+struct gomp_for;
+struct gomp_parallel;
+struct gomp_task;
+struct gomp_sections;
+struct gomp_single;
+struct gomp_target;
+struct gomp_teams;
+
+/* Subclasses of symtab_node, using indentation to show the class
+ hierarchy. */
+
+struct symtab_node;
+ struct cgraph_node;
+ struct varpool_node;
+struct cgraph_edge;
+
union section;
typedef union section section;
struct gcc_options;
struct cl_decoded_option;
struct cl_option_handlers;
struct diagnostic_context;
-struct pretty_printer;
+class pretty_printer;
+class diagnostic_event_id_t;
+
+template<typename T> struct array_traits;
+
+/* Provides a read-only bitmap view of a single integer bitmask or an
+ array of integer bitmasks, or of a wrapper around such bitmasks. */
+template<typename T, typename Traits = array_traits<T>,
+ bool has_constant_size = Traits::has_constant_size>
+class bitmap_view;
/* Address space number for named address space support. */
typedef unsigned char addr_space_t;
TLS_MODEL_LOCAL_EXEC
};
+/* Types of ABI for an offload compiler. */
+enum offload_abi {
+ OFFLOAD_ABI_UNSET,
+ OFFLOAD_ABI_LP64,
+ OFFLOAD_ABI_ILP32
+};
+
+/* Types of profile update methods. */
+enum profile_update {
+ PROFILE_UPDATE_SINGLE,
+ PROFILE_UPDATE_ATOMIC,
+ PROFILE_UPDATE_PREFER_ATOMIC
+};
+
+/* Type of profile reproducibility methods. */
+enum profile_reproducibility {
+ PROFILE_REPRODUCIBILITY_SERIAL,
+ PROFILE_REPRODUCIBILITY_PARALLEL_RUNS,
+ PROFILE_REPRODUCIBILITY_MULTITHREADED
+};
+
/* Types of unwind/exception handling info that can be generated. */
enum unwind_info_type
NODE_FREQUENCY_HOT
};
+/* Ways of optimizing code. */
+enum optimization_type {
+ /* Prioritize speed over size. */
+ OPTIMIZE_FOR_SPEED,
+
+ /* Only do things that are good for both size and speed. */
+ OPTIMIZE_FOR_BOTH,
+
+ /* Prioritize size over speed. */
+ OPTIMIZE_FOR_SIZE
+};
+
+/* Enumerates a padding direction. */
+enum pad_direction {
+ /* No padding is required. */
+ PAD_NONE,
+
+ /* Insert padding above the data, i.e. at higher memeory addresses
+ when dealing with memory, and at the most significant end when
+ dealing with registers. */
+ PAD_UPWARD,
+
+ /* Insert padding below the data, i.e. at lower memeory addresses
+ when dealing with memory, and at the least significant end when
+ dealing with registers. */
+ PAD_DOWNWARD
+};
+
/* Possible initialization status of a variable. When requested
by the user, this information is tracked and recorded in the DWARF
debug information, along with the variable's location. */
VAR_INIT_STATUS_INITIALIZED
};
+/* Names for the different levels of -Wstrict-overflow=N. The numeric
+ values here correspond to N. */
+enum warn_strict_overflow_code
+{
+ /* Overflow warning that should be issued with -Wall: a questionable
+ construct that is easy to avoid even when using macros. Example:
+ folding (x + CONSTANT > x) to 1. */
+ WARN_STRICT_OVERFLOW_ALL = 1,
+ /* Overflow warning about folding a comparison to a constant because
+ of undefined signed overflow, other than cases covered by
+ WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1
+ (this is false when x == INT_MIN). */
+ WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
+ /* Overflow warning about changes to comparisons other than folding
+ them to a constant. Example: folding (x + 1 > 1) to (x > 0). */
+ WARN_STRICT_OVERFLOW_COMPARISON = 3,
+ /* Overflow warnings not covered by the above cases. Example:
+ folding ((x * 10) / 5) to (x * 2). */
+ WARN_STRICT_OVERFLOW_MISC = 4,
+ /* Overflow warnings about reducing magnitude of constants in
+ comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */
+ WARN_STRICT_OVERFLOW_MAGNITUDE = 5
+};
-struct edge_def;
-typedef struct edge_def *edge;
-typedef const struct edge_def *const_edge;
+/* The type of an alias set. Code currently assumes that variables of
+ this type can take the values 0 (the alias set which aliases
+ everything) and -1 (sometimes indicating that the alias set is
+ unknown, sometimes indicating a memory barrier) and -2 (indicating
+ that the alias set should be set to a unique value but has not been
+ set yet). */
+typedef int alias_set_type;
+
+class edge_def;
+typedef class edge_def *edge;
+typedef const class edge_def *const_edge;
struct basic_block_def;
typedef struct basic_block_def *basic_block;
typedef const struct basic_block_def *const_basic_block;
-#define obstack_chunk_alloc ((void *(*) (long)) xmalloc)
-#define obstack_chunk_free ((void (*) (void *)) free)
-#define OBSTACK_CHUNK_SIZE 0
-#define gcc_obstack_init(OBSTACK) \
- _obstack_begin ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
- obstack_chunk_alloc, \
- obstack_chunk_free)
+#if !defined (GENERATOR_FILE)
+# define OBSTACK_CHUNK_SIZE memory_block_pool::block_size
+# define obstack_chunk_alloc mempool_obstack_chunk_alloc
+# define obstack_chunk_free mempool_obstack_chunk_free
+#else
+# define OBSTACK_CHUNK_SIZE 0
+# define obstack_chunk_alloc xmalloc
+# define obstack_chunk_free free
+#endif
+
+#define gcc_obstack_init(OBSTACK) \
+ obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
+ obstack_chunk_alloc, \
+ obstack_chunk_free)
/* enum reg_class is target specific, so it should not appear in
target-independent code or interfaces, like the target hook declarations
class context;
}
+typedef std::pair <tree, tree> tree_pair;
+typedef std::pair <const char *, int> string_int_pair;
+
+/* Define a name->value mapping. */
+template <typename ValueType>
+struct kv_pair
+{
+ const char *const name; /* the name of the value */
+ const ValueType value; /* the value of the name */
+};
+
+/* Alias of the first type, ignoring the second. */
+template<typename T1, typename T2>
+using first_type = T1;
+
+/* Iterator pair used for a collection iteration with range-based loops. */
+
+template<typename T>
+struct iterator_range
+{
+public:
+ iterator_range (const T &begin, const T &end)
+ : m_begin (begin), m_end (end) {}
+
+ T begin () const { return m_begin; }
+ T end () const { return m_end; }
+
+private:
+ T m_begin;
+ T m_end;
+};
+
#else
struct _dont_use_rtx_here_;
struct _dont_use_rtvec_here_;
+struct _dont_use_rtx_insn_here_;
union _dont_use_tree_here_;
#define rtx struct _dont_use_rtx_here_ *
#define const_rtx struct _dont_use_rtx_here_ *
#define rtvec struct _dont_use_rtvec_here *
#define const_rtvec struct _dont_use_rtvec_here *
+#define rtx_insn struct _dont_use_rtx_insn_here_
#define tree union _dont_use_tree_here_ *
#define const_tree union _dont_use_tree_here_ *
+typedef struct scalar_mode scalar_mode;
+typedef struct scalar_int_mode scalar_int_mode;
+typedef struct scalar_float_mode scalar_float_mode;
+typedef struct complex_mode complex_mode;
+
#endif
/* Classes of functions that compiler needs to check
function_c99_misc,
function_c99_math_complex,
function_sincos,
- function_c11_misc
+ function_c11_misc,
+ function_c2x_misc
+};
+
+/* Enumerate visibility settings. This is deliberately ordered from most
+ to least visibility. */
+enum symbol_visibility
+{
+ VISIBILITY_DEFAULT,
+ VISIBILITY_PROTECTED,
+ VISIBILITY_HIDDEN,
+ VISIBILITY_INTERNAL
};
-/* Memory model types for the __atomic* builtins.
- This must match the order in libstdc++-v3/include/bits/atomic_base.h. */
-enum memmodel
+/* enums used by the targetm.excess_precision hook. */
+
+enum flt_eval_method
{
- MEMMODEL_RELAXED = 0,
- MEMMODEL_CONSUME = 1,
- MEMMODEL_ACQUIRE = 2,
- MEMMODEL_RELEASE = 3,
- MEMMODEL_ACQ_REL = 4,
- MEMMODEL_SEQ_CST = 5,
- MEMMODEL_LAST = 6
+ FLT_EVAL_METHOD_UNPREDICTABLE = -1,
+ FLT_EVAL_METHOD_PROMOTE_TO_FLOAT = 0,
+ FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE = 1,
+ FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE = 2,
+ FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 = 16
};
-/* Suppose that higher bits are target dependent. */
-#define MEMMODEL_MASK ((1<<16)-1)
+enum excess_precision_type
+{
+ EXCESS_PRECISION_TYPE_IMPLICIT,
+ EXCESS_PRECISION_TYPE_STANDARD,
+ EXCESS_PRECISION_TYPE_FAST
+};
/* Support for user-provided GGC and PCH markers. The first parameter
is a pointer to a pointer, the second a cookie. */
typedef unsigned char uchar;
#endif
+/* Most source files will require the following headers. */
+#if !defined (USED_FOR_TARGET)
+#include "insn-modes.h"
+#include "signop.h"
+#include "wide-int.h"
+#include "wide-int-print.h"
+
+/* On targets that don't need polynomial offsets, target-specific code
+ should be able to treat poly_int like a normal constant, with a
+ conversion operator going from the former to the latter. We also
+ allow this for gencondmd.c for all targets, so that we can treat
+ machine_modes as enums without causing build failures. */
+#if (defined (IN_TARGET_CODE) \
+ && (defined (USE_ENUM_MODES) || NUM_POLY_INT_COEFFS == 1))
+#define POLY_INT_CONVERSION 1
+#else
+#define POLY_INT_CONVERSION 0
+#endif
+
+#include "poly-int.h"
+#include "poly-int-types.h"
+#include "insn-modes-inline.h"
+#include "machmode.h"
+#include "double-int.h"
+#include "align.h"
+/* Most host source files will require the following headers. */
+#if !defined (GENERATOR_FILE)
+#include "real.h"
+#include "fixed-value.h"
+#include "hash-table.h"
+#include "hash-set.h"
+#include "input.h"
+#include "is-a.h"
+#include "memory-block.h"
+#include "dumpfile.h"
+#endif
+#endif /* GENERATOR_FILE && !USED_FOR_TARGET */
+
#endif /* coretypes.h */