Backport from GCC mainline.
[platform/upstream/linaro-gcc.git] / gcc / coretypes.h
1 /* GCC core type declarations.
2    Copyright (C) 2002-2016 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 Under Section 7 of GPL version 3, you are granted additional
17 permissions described in the GCC Runtime Library Exception, version
18 3.1, as published by the Free Software Foundation.
19
20 You should have received a copy of the GNU General Public License and
21 a copy of the GCC Runtime Library Exception along with this program;
22 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* Provide forward declarations of core types which are referred to by
26    most of the compiler.  This allows header files to use these types
27    (e.g. in function prototypes) without concern for whether the full
28    definitions are visible.  Some other declarations that need to be
29    universally visible are here, too.
30
31    In the context of tconfig.h, most of these have special definitions
32    which prevent them from being used except in further type
33    declarations.  This is a kludge; the right thing is to avoid
34    including the "tm.h" header set in the context of tconfig.h, but
35    we're not there yet.  */
36
37 #ifndef GCC_CORETYPES_H
38 #define GCC_CORETYPES_H
39
40 #ifndef GTY
41 #define GTY(x)  /* nothing - marker for gengtype */
42 #endif
43
44 #ifndef USED_FOR_TARGET
45
46 typedef int64_t gcov_type;
47 typedef uint64_t gcov_type_unsigned;
48
49 struct bitmap_head;
50 typedef struct bitmap_head *bitmap;
51 typedef const struct bitmap_head *const_bitmap;
52 struct simple_bitmap_def;
53 typedef struct simple_bitmap_def *sbitmap;
54 typedef const struct simple_bitmap_def *const_sbitmap;
55 struct rtx_def;
56 typedef struct rtx_def *rtx;
57 typedef const struct rtx_def *const_rtx;
58
59 /* Subclasses of rtx_def, using indentation to show the class
60    hierarchy, along with the relevant invariant.
61    Where possible, keep this list in the same order as in rtl.def.  */
62 class rtx_def;
63   class rtx_expr_list;           /* GET_CODE (X) == EXPR_LIST */
64   class rtx_insn_list;           /* GET_CODE (X) == INSN_LIST */
65   class rtx_sequence;            /* GET_CODE (X) == SEQUENCE */
66   class rtx_insn;
67     class rtx_debug_insn;      /* DEBUG_INSN_P (X) */
68     class rtx_nonjump_insn;    /* NONJUMP_INSN_P (X) */
69     class rtx_jump_insn;       /* JUMP_P (X) */
70     class rtx_call_insn;       /* CALL_P (X) */
71     class rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
72     class rtx_barrier;         /* BARRIER_P (X) */
73     class rtx_code_label;      /* LABEL_P (X) */
74     class rtx_note;            /* NOTE_P (X) */
75
76 struct rtvec_def;
77 typedef struct rtvec_def *rtvec;
78 typedef const struct rtvec_def *const_rtvec;
79 struct hwivec_def;
80 typedef struct hwivec_def *hwivec;
81 typedef const struct hwivec_def *const_hwivec;
82 union tree_node;
83 typedef union tree_node *tree;
84 typedef const union tree_node *const_tree;
85 struct gimple;
86 typedef gimple *gimple_seq;
87 struct gimple_stmt_iterator;
88
89 /* Forward decls for leaf gimple subclasses (for individual gimple codes).
90    Keep this in the same order as the corresponding codes in gimple.def.  */
91
92 struct gcond;
93 struct gdebug;
94 struct ggoto;
95 struct glabel;
96 struct gswitch;
97 struct gassign;
98 struct gasm;
99 struct gcall;
100 struct gtransaction;
101 struct greturn;
102 struct gbind;
103 struct gcatch;
104 struct geh_filter;
105 struct geh_mnt;
106 struct geh_else;
107 struct gresx;
108 struct geh_dispatch;
109 struct gphi;
110 struct gtry;
111 struct gomp_atomic_load;
112 struct gomp_atomic_store;
113 struct gomp_continue;
114 struct gomp_critical;
115 struct gomp_ordered;
116 struct gomp_for;
117 struct gomp_parallel;
118 struct gomp_task;
119 struct gomp_sections;
120 struct gomp_single;
121 struct gomp_target;
122 struct gomp_teams;
123
124 union section;
125 typedef union section section;
126 struct gcc_options;
127 struct cl_target_option;
128 struct cl_optimization;
129 struct cl_option;
130 struct cl_decoded_option;
131 struct cl_option_handlers;
132 struct diagnostic_context;
133 struct pretty_printer;
134
135 /* Address space number for named address space support.  */
136 typedef unsigned char addr_space_t;
137
138 /* The value of addr_space_t that represents the generic address space.  */
139 #define ADDR_SPACE_GENERIC 0
140 #define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
141
142 /* The major intermediate representations of GCC.  */
143 enum ir_type {
144   IR_GIMPLE,
145   IR_RTL_CFGRTL,
146   IR_RTL_CFGLAYOUT
147 };
148
149 /* Provide forward struct declaration so that we don't have to include
150    all of cpplib.h whenever a random prototype includes a pointer.
151    Note that the cpp_reader and cpp_token typedefs remain part of
152    cpplib.h.  */
153
154 struct cpp_reader;
155 struct cpp_token;
156
157 /* The thread-local storage model associated with a given VAR_DECL
158    or SYMBOL_REF.  This isn't used much, but both trees and RTL refer
159    to it, so it's here.  */
160 enum tls_model {
161   TLS_MODEL_NONE,
162   TLS_MODEL_EMULATED,
163   TLS_MODEL_REAL,
164   TLS_MODEL_GLOBAL_DYNAMIC = TLS_MODEL_REAL,
165   TLS_MODEL_LOCAL_DYNAMIC,
166   TLS_MODEL_INITIAL_EXEC,
167   TLS_MODEL_LOCAL_EXEC
168 };
169
170 /* Types of ABI for an offload compiler.  */
171 enum offload_abi {
172   OFFLOAD_ABI_UNSET,
173   OFFLOAD_ABI_LP64,
174   OFFLOAD_ABI_ILP32
175 };
176
177 /* Types of unwind/exception handling info that can be generated.  */
178
179 enum unwind_info_type
180 {
181   UI_NONE,
182   UI_SJLJ,
183   UI_DWARF2,
184   UI_TARGET,
185   UI_SEH
186 };
187
188 /* Callgraph node profile representation.  */
189 enum node_frequency {
190   /* This function most likely won't be executed at all.
191      (set only when profile feedback is available or via function attribute). */
192   NODE_FREQUENCY_UNLIKELY_EXECUTED,
193   /* For functions that are known to be executed once (i.e. constructors, destructors
194      and main function.  */
195   NODE_FREQUENCY_EXECUTED_ONCE,
196   /* The default value.  */
197   NODE_FREQUENCY_NORMAL,
198   /* Optimize this function hard
199      (set only when profile feedback is available or via function attribute). */
200   NODE_FREQUENCY_HOT
201 };
202
203 /* Ways of optimizing code.  */
204 enum optimization_type {
205   /* Prioritize speed over size.  */
206   OPTIMIZE_FOR_SPEED,
207
208   /* Only do things that are good for both size and speed.  */
209   OPTIMIZE_FOR_BOTH,
210
211   /* Prioritize size over speed.  */
212   OPTIMIZE_FOR_SIZE
213 };
214
215 /* Possible initialization status of a variable.   When requested
216    by the user, this information is tracked and recorded in the DWARF
217    debug information, along with the variable's location.  */
218 enum var_init_status
219 {
220   VAR_INIT_STATUS_UNKNOWN,
221   VAR_INIT_STATUS_UNINITIALIZED,
222   VAR_INIT_STATUS_INITIALIZED
223 };
224
225 /* The type of an alias set.  Code currently assumes that variables of
226    this type can take the values 0 (the alias set which aliases
227    everything) and -1 (sometimes indicating that the alias set is
228    unknown, sometimes indicating a memory barrier) and -2 (indicating
229    that the alias set should be set to a unique value but has not been
230    set yet).  */
231 typedef int alias_set_type;
232
233 struct edge_def;
234 typedef struct edge_def *edge;
235 typedef const struct edge_def *const_edge;
236 struct basic_block_def;
237 typedef struct basic_block_def *basic_block;
238 typedef const struct basic_block_def *const_basic_block;
239
240 #if !defined (GENERATOR_FILE)
241 # define OBSTACK_CHUNK_SIZE     memory_block_pool::block_size
242 # define obstack_chunk_alloc    mempool_obstack_chunk_alloc
243 # define obstack_chunk_free     mempool_obstack_chunk_free
244 #else
245 # define OBSTACK_CHUNK_SIZE     0
246 # define obstack_chunk_alloc    xmalloc
247 # define obstack_chunk_free     free
248 #endif
249
250 #define gcc_obstack_init(OBSTACK)                               \
251   obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
252                               obstack_chunk_alloc,              \
253                               obstack_chunk_free)
254
255 /* enum reg_class is target specific, so it should not appear in
256    target-independent code or interfaces, like the target hook declarations
257    in target.h.  */
258 typedef int reg_class_t;
259
260 class rtl_opt_pass;
261
262 namespace gcc {
263   class context;
264 }
265
266 typedef std::pair <tree, tree> tree_pair;
267
268 #else
269
270 struct _dont_use_rtx_here_;
271 struct _dont_use_rtvec_here_;
272 struct _dont_use_rtx_insn_here_;
273 union _dont_use_tree_here_;
274 #define rtx struct _dont_use_rtx_here_ *
275 #define const_rtx struct _dont_use_rtx_here_ *
276 #define rtvec struct _dont_use_rtvec_here *
277 #define const_rtvec struct _dont_use_rtvec_here *
278 #define rtx_insn struct _dont_use_rtx_insn_here_
279 #define tree union _dont_use_tree_here_ *
280 #define const_tree union _dont_use_tree_here_ *
281
282 #endif
283
284 /* Classes of functions that compiler needs to check
285    whether they are present at the runtime or not.  */
286 enum function_class {
287   function_c94,
288   function_c99_misc,
289   function_c99_math_complex,
290   function_sincos,
291   function_c11_misc
292 };
293
294 /* Enumerate visibility settings.  This is deliberately ordered from most
295    to least visibility.  */
296 enum symbol_visibility
297 {
298   VISIBILITY_DEFAULT,
299   VISIBILITY_PROTECTED,
300   VISIBILITY_HIDDEN,
301   VISIBILITY_INTERNAL
302 };
303
304 /* Suppose that higher bits are target dependent. */
305 #define MEMMODEL_MASK ((1<<16)-1)
306
307 /* Legacy sync operations set this upper flag in the memory model.  This allows
308    targets that need to do something stronger for sync operations to
309    differentiate with their target patterns and issue a more appropriate insn
310    sequence.  See bugzilla 65697 for background.  */
311 #define MEMMODEL_SYNC (1<<15)
312
313 /* Memory model without SYNC bit for targets/operations that do not care.  */
314 #define MEMMODEL_BASE_MASK (MEMMODEL_SYNC-1)
315
316 /* Memory model types for the __atomic* builtins. 
317    This must match the order in libstdc++-v3/include/bits/atomic_base.h.  */
318 enum memmodel
319 {
320   MEMMODEL_RELAXED = 0,
321   MEMMODEL_CONSUME = 1,
322   MEMMODEL_ACQUIRE = 2,
323   MEMMODEL_RELEASE = 3,
324   MEMMODEL_ACQ_REL = 4,
325   MEMMODEL_SEQ_CST = 5,
326   MEMMODEL_LAST = 6,
327   MEMMODEL_SYNC_ACQUIRE = MEMMODEL_ACQUIRE | MEMMODEL_SYNC,
328   MEMMODEL_SYNC_RELEASE = MEMMODEL_RELEASE | MEMMODEL_SYNC,
329   MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC
330 };
331
332 /* Support for user-provided GGC and PCH markers.  The first parameter
333    is a pointer to a pointer, the second a cookie.  */
334 typedef void (*gt_pointer_operator) (void *, void *);
335
336 #if !defined (HAVE_UCHAR)
337 typedef unsigned char uchar;
338 #endif
339
340 /* Most host source files will require the following headers.  */
341 #if !defined (GENERATOR_FILE) && !defined (USED_FOR_TARGET)
342 #include "machmode.h"
343 #include "signop.h"
344 #include "wide-int.h" 
345 #include "double-int.h"
346 #include "real.h"
347 #include "fixed-value.h"
348 #include "hash-table.h"
349 #include "hash-set.h"
350 #include "input.h"
351 #include "is-a.h"
352 #include "memory-block.h"
353 #endif /* GENERATOR_FILE && !USED_FOR_TARGET */
354
355 #endif /* coretypes.h */