/* GCC core type declarations.
- Copyright (C) 2002-2016 Free Software Foundation, Inc.
+ Copyright (C) 2002-2020 Free Software Foundation, Inc.
This file is part of GCC.
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. */
-class rtx_def;
- class rtx_expr_list; /* GET_CODE (X) == EXPR_LIST */
- class rtx_insn_list; /* GET_CODE (X) == INSN_LIST */
- class rtx_sequence; /* GET_CODE (X) == SEQUENCE */
- class rtx_insn;
- class rtx_debug_insn; /* DEBUG_INSN_P (X) */
- class rtx_nonjump_insn; /* NONJUMP_INSN_P (X) */
- class rtx_jump_insn; /* JUMP_P (X) */
- class rtx_call_insn; /* CALL_P (X) */
- class rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
- class rtx_barrier; /* BARRIER_P (X) */
- class rtx_code_label; /* LABEL_P (X) */
- class rtx_note; /* NOTE_P (X) */
+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;
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;
/* Types of profile update methods. */
enum profile_update {
PROFILE_UPDATE_SINGLE,
- PROFILE_UPDATE_ATOMIC
+ 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. */
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. */
set yet). */
typedef int alias_set_type;
-struct edge_def;
-typedef struct edge_def *edge;
-typedef const struct edge_def *const_edge;
+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;
}
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
#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
VISIBILITY_INTERNAL
};
-/* Suppose that higher bits are target dependent. */
-#define MEMMODEL_MASK ((1<<16)-1)
+/* enums used by the targetm.excess_precision hook. */
-/* Legacy sync operations set this upper flag in the memory model. This allows
- targets that need to do something stronger for sync operations to
- differentiate with their target patterns and issue a more appropriate insn
- sequence. See bugzilla 65697 for background. */
-#define MEMMODEL_SYNC (1<<15)
-
-/* Memory model without SYNC bit for targets/operations that do not care. */
-#define MEMMODEL_BASE_MASK (MEMMODEL_SYNC-1)
+enum flt_eval_method
+{
+ 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
+};
-/* Memory model types for the __atomic* builtins.
- This must match the order in libstdc++-v3/include/bits/atomic_base.h. */
-enum memmodel
+enum excess_precision_type
{
- MEMMODEL_RELAXED = 0,
- MEMMODEL_CONSUME = 1,
- MEMMODEL_ACQUIRE = 2,
- MEMMODEL_RELEASE = 3,
- MEMMODEL_ACQ_REL = 4,
- MEMMODEL_SEQ_CST = 5,
- MEMMODEL_LAST = 6,
- MEMMODEL_SYNC_ACQUIRE = MEMMODEL_ACQUIRE | MEMMODEL_SYNC,
- MEMMODEL_SYNC_RELEASE = MEMMODEL_RELEASE | MEMMODEL_SYNC,
- MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC
+ EXCESS_PRECISION_TYPE_IMPLICIT,
+ EXCESS_PRECISION_TYPE_STANDARD,
+ EXCESS_PRECISION_TYPE_FAST
};
/* Support for user-provided GGC and PCH markers. The first parameter
typedef unsigned char uchar;
#endif
-/* C++11 adds the ability to add "override" after an implementation of a
- virtual function in a subclass, to:
- (A) document that this is an override of a virtual function
- (B) allow the compiler to issue a warning if it isn't (e.g. a mismatch
- of the type signature).
-
- Similarly, it allows us to add a "final" to indicate that no subclass
- may subsequently override the vfunc.
-
- Provide OVERRIDE and FINAL as macros, allowing us to get these benefits
- when compiling with C++11 support, but without requiring C++11.
-
- For gcc, use "-std=c++11" to enable C++11 support; gcc 6 onwards enables
- this by default (actually GNU++14). */
-
-#if __cplusplus >= 201103
-/* C++11 claims to be available: use it: */
-#define OVERRIDE override
-#define FINAL final
+/* 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
-/* No C++11 support; leave the macros empty: */
-#define OVERRIDE
-#define FINAL
+#define POLY_INT_CONVERSION 0
#endif
-/* Most host source files will require the following headers. */
-#if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
+#include "poly-int.h"
+#include "poly-int-types.h"
+#include "insn-modes-inline.h"
#include "machmode.h"
-#include "signop.h"
-#include "wide-int.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 "input.h"
#include "is-a.h"
#include "memory-block.h"
+#include "dumpfile.h"
+#endif
#endif /* GENERATOR_FILE && !USED_FOR_TARGET */
#endif /* coretypes.h */