GCC Middle and Back End API Reference
coretypes.h
Go to the documentation of this file.
1/* GCC core type declarations.
2 Copyright (C) 2002-2024 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16Under Section 7 of GPL version 3, you are granted additional
17permissions described in the GCC Runtime Library Exception, version
183.1, as published by the Free Software Foundation.
19
20You should have received a copy of the GNU General Public License and
21a copy of the GCC Runtime Library Exception along with this program;
22see 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
48
49struct bitmap_obstack;
50class bitmap_head;
51typedef class bitmap_head *bitmap;
52typedef const class bitmap_head *const_bitmap;
54typedef struct simple_bitmap_def *sbitmap;
55typedef const struct simple_bitmap_def *const_sbitmap;
56struct rtx_def;
57typedef struct rtx_def *rtx;
58typedef const struct rtx_def *const_rtx;
59class scalar_mode;
60class scalar_int_mode;
62class complex_mode;
63class fixed_size_mode;
64template<typename> class opt_mode;
68template<typename> struct pod_mode;
72
73/* Subclasses of rtx_def, using indentation to show the class
74 hierarchy, along with the relevant invariant.
75 Where possible, keep this list in the same order as in rtl.def. */
76struct rtx_def;
77 struct rtx_expr_list; /* GET_CODE (X) == EXPR_LIST */
78 struct rtx_insn_list; /* GET_CODE (X) == INSN_LIST */
79 struct rtx_sequence; /* GET_CODE (X) == SEQUENCE */
80 struct rtx_insn;
81 struct rtx_debug_insn; /* DEBUG_INSN_P (X) */
82 struct rtx_nonjump_insn; /* NONJUMP_INSN_P (X) */
83 struct rtx_jump_insn; /* JUMP_P (X) */
84 struct rtx_call_insn; /* CALL_P (X) */
85 struct rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
86 struct rtx_barrier; /* BARRIER_P (X) */
87 struct rtx_code_label; /* LABEL_P (X) */
88 struct rtx_note; /* NOTE_P (X) */
89
90struct rtvec_def;
91typedef struct rtvec_def *rtvec;
92typedef const struct rtvec_def *const_rtvec;
93struct hwivec_def;
94typedef struct hwivec_def *hwivec;
95typedef const struct hwivec_def *const_hwivec;
96union tree_node;
97typedef union tree_node *tree;
98typedef const union tree_node *const_tree;
99struct gimple;
102class code_helper;
103
104/* Forward declare rtx_code, so that we can use it in target hooks without
105 needing to pull in rtl.h. */
106enum rtx_code : unsigned;
107
108/* Forward decls for leaf gimple subclasses (for individual gimple codes).
109 Keep this in the same order as the corresponding codes in gimple.def. */
110
111struct gcond;
112struct gdebug;
113struct ggoto;
114struct glabel;
115struct gswitch;
116struct gassign;
117struct gasm;
118struct gcall;
119struct gtransaction;
120struct greturn;
121struct gbind;
122struct gcatch;
123struct geh_filter;
124struct geh_mnt;
125struct geh_else;
126struct gresx;
127struct geh_dispatch;
128struct gphi;
129struct gtry;
130struct gomp_atomic_load;
131struct gomp_atomic_store;
132struct gomp_continue;
133struct gomp_critical;
134struct gomp_ordered;
135struct gomp_for;
136struct gomp_parallel;
137struct gomp_task;
138struct gomp_sections;
139struct gomp_single;
140struct gomp_target;
141struct gomp_teams;
142
143/* Subclasses of symtab_node, using indentation to show the class
144 hierarchy. */
145
146struct symtab_node;
147 struct cgraph_node;
148 struct varpool_node;
149struct cgraph_edge;
150
151union section;
152typedef union section section;
153struct gcc_options;
154struct cl_target_option;
155struct cl_optimization;
156struct cl_option;
157struct cl_decoded_option;
158struct cl_option_handlers;
159class rich_location;
161class pretty_printer;
163typedef const char * (*diagnostic_input_charset_callback)(const char *);
164
165template<typename T> struct array_traits;
166
167/* Provides a read-only bitmap view of a single integer bitmask or an
168 array of integer bitmasks, or of a wrapper around such bitmasks. */
169template<typename T, typename Traits = array_traits<T>,
170 bool has_constant_size = Traits::has_constant_size>
172
173/* Address space number for named address space support. */
174typedef unsigned char addr_space_t;
175
176/* The value of addr_space_t that represents the generic address space. */
177#define ADDR_SPACE_GENERIC 0
178#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
179
180/* The major intermediate representations of GCC. */
186
187/* Provide forward struct declaration so that we don't have to include
188 all of cpplib.h whenever a random prototype includes a pointer.
189 Note that the cpp_reader and cpp_token typedefs remain part of
190 cpplib.h. */
191
192struct cpp_reader;
193struct cpp_token;
194
195/* The thread-local storage model associated with a given VAR_DECL
196 or SYMBOL_REF. This isn't used much, but both trees and RTL refer
197 to it, so it's here. */
207
208/* Types of trampoline implementation. */
213
214/* Types of ABI for an offload compiler. */
220
221/* Types of profile update methods. */
227
228/* Type of profile reproducibility methods. */
234
235/* Type of -fstack-protector-*. */
242
243/* Types of unwind/exception handling info that can be generated.
244 Note that a UI_TARGET (or larger) setting is considered to be
245 incompatible with -freorder-blocks-and-partition. */
246
255
256/* Callgraph node profile representation. */
258 /* This function most likely won't be executed at all.
259 (set only when profile feedback is available or via function attribute). */
261 /* For functions that are known to be executed once (i.e. constructors, destructors
262 and main function. */
264 /* The default value. */
266 /* Optimize this function hard
267 (set only when profile feedback is available or via function attribute). */
270
271/* Ways of optimizing code. */
273 /* Prioritize speed over size. */
275
276 /* Only do things that are good for both size and speed. */
278
279 /* Prioritize size over speed. */
282
283/* Enumerates a padding direction. */
285 /* No padding is required. */
287
288 /* Insert padding above the data, i.e. at higher memeory addresses
289 when dealing with memory, and at the most significant end when
290 dealing with registers. */
292
293 /* Insert padding below the data, i.e. at lower memeory addresses
294 when dealing with memory, and at the least significant end when
295 dealing with registers. */
298
299/* Possible initialization status of a variable. When requested
300 by the user, this information is tracked and recorded in the DWARF
301 debug information, along with the variable's location. */
308
309/* Names for the different levels of -Wstrict-overflow=N. The numeric
310 values here correspond to N. */
312{
313 /* Overflow warning that should be issued with -Wall: a questionable
314 construct that is easy to avoid even when using macros. Example:
315 folding (x + CONSTANT > x) to 1. */
317 /* Overflow warning about folding a comparison to a constant because
318 of undefined signed overflow, other than cases covered by
319 WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1
320 (this is false when x == INT_MIN). */
322 /* Overflow warning about changes to comparisons other than folding
323 them to a constant. Example: folding (x + 1 > 1) to (x > 0). */
325 /* Overflow warnings not covered by the above cases. Example:
326 folding ((x * 10) / 5) to (x * 2). */
328 /* Overflow warnings about reducing magnitude of constants in
329 comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */
332
333/* The type of an alias set. Code currently assumes that variables of
334 this type can take the values 0 (the alias set which aliases
335 everything) and -1 (sometimes indicating that the alias set is
336 unknown, sometimes indicating a memory barrier) and -2 (indicating
337 that the alias set should be set to a unique value but has not been
338 set yet). */
339typedef int alias_set_type;
340
341class edge_def;
342typedef class edge_def *edge;
343typedef const class edge_def *const_edge;
344struct basic_block_def;
346typedef const struct basic_block_def *const_basic_block;
347
348#if !defined (GENERATOR_FILE)
349# define OBSTACK_CHUNK_SIZE memory_block_pool::block_size
350# define obstack_chunk_alloc mempool_obstack_chunk_alloc
351# define obstack_chunk_free mempool_obstack_chunk_free
352#else
353# define OBSTACK_CHUNK_SIZE 0
354# define obstack_chunk_alloc xmalloc
355# define obstack_chunk_free free
356#endif
357
358#define gcc_obstack_init(OBSTACK) \
359 obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0, \
360 obstack_chunk_alloc, \
361 obstack_chunk_free)
362
363/* enum reg_class is target specific, so it should not appear in
364 target-independent code or interfaces, like the target hook declarations
365 in target.h. */
366typedef int reg_class_t;
367
368class rtl_opt_pass;
369
370namespace gcc {
371 class context;
372}
373
374typedef std::pair <tree, tree> tree_pair;
375typedef std::pair <const char *, int> string_int_pair;
376
377/* Define a name->value mapping. */
378template <typename ValueType>
380{
381 const char *const name; /* the name of the value */
382 const ValueType value; /* the value of the name */
383};
384
385#else
386
391#define rtx struct _dont_use_rtx_here_ *
392#define const_rtx struct _dont_use_rtx_here_ *
393#define rtvec struct _dont_use_rtvec_here *
394#define const_rtvec struct _dont_use_rtvec_here *
395#define rtx_insn struct _dont_use_rtx_insn_here_
396#define tree union _dont_use_tree_here_ *
397#define const_tree union _dont_use_tree_here_ *
398
399typedef struct scalar_mode scalar_mode;
400typedef struct scalar_int_mode scalar_int_mode;
402typedef struct complex_mode complex_mode;
403
404#endif
405
406/* Classes of functions that compiler needs to check
407 whether they are present at the runtime or not. */
416
417/* Enumerate visibility settings. This is deliberately ordered from most
418 to least visibility. */
426
427/* enums used by the targetm.excess_precision hook. */
428
437
445
446/* Level of size optimization. */
447
449{
450 /* Do not optimize for size. */
452 /* Optimize for size but not at extreme performance costs. */
454 /* Optimize for size as much as possible. */
457
458/* Support for user-provided GGC and PCH markers. The first parameter
459 is a pointer to a pointer, the second either NULL if the pointer to
460 pointer points into a GC object or the actual pointer address if
461 the first argument points to a temporary and the third a cookie. */
462typedef void (*gt_pointer_operator) (void *, void *, void *);
463
464#if !defined (HAVE_UCHAR)
465typedef unsigned char uchar;
466#endif
467
468/* Most source files will require the following headers. */
469#if !defined (USED_FOR_TARGET)
470#include "insn-modes.h"
471#include "signop.h"
472#include "wide-int.h"
473#include "wide-int-print.h"
474
475/* On targets that don't need polynomial offsets, target-specific code
476 should be able to treat poly_int like a normal constant, with a
477 conversion operator going from the former to the latter. We also
478 allow this for gencondmd.cc for all targets, so that we can treat
479 machine_modes as enums without causing build failures. */
480#if (defined (IN_TARGET_CODE) \
481 && (defined (USE_ENUM_MODES) || NUM_POLY_INT_COEFFS == 1))
482#define POLY_INT_CONVERSION 1
483#else
484#define POLY_INT_CONVERSION 0
485#endif
486
487#include "poly-int.h"
488#include "poly-int-types.h"
489#include "insn-modes-inline.h"
490#include "machmode.h"
491#include "double-int.h"
492#include "align.h"
493/* Most host source files will require the following headers. */
494#if !defined (GENERATOR_FILE)
495#include "iterator-utils.h"
496#include "real.h"
497#include "fixed-value.h"
498#include "hash-table.h"
499#include "hash-set.h"
500#include "input.h"
501#include "is-a.h"
502#include "memory-block.h"
503#include "dumpfile.h"
504#endif
505#endif /* GENERATOR_FILE && !USED_FOR_TARGET */
506
507#endif /* coretypes.h */
Definition bitmap.h:328
Definition coretypes.h:171
Definition cgraph.h:1696
Definition tree.h:81
Definition machmode.h:533
Definition diagnostic.h:374
Definition diagnostic-event-id.h:37
Definition basic-block.h:26
Definition machmode.h:823
Definition machmode.h:263
Definition pretty-print.h:244
Definition tree-pass.h:127
Definition machmode.h:455
Definition machmode.h:427
Definition machmode.h:483
struct basic_block_def * basic_block
Definition coretypes.h:345
struct rtx_def * rtx
Definition coretypes.h:57
opt_mode< scalar_float_mode > opt_scalar_float_mode
Definition coretypes.h:67
unwind_info_type
Definition coretypes.h:248
@ UI_SJLJ
Definition coretypes.h:250
@ UI_DWARF2
Definition coretypes.h:251
@ UI_SEH
Definition coretypes.h:252
@ UI_NONE
Definition coretypes.h:249
@ UI_TARGET
Definition coretypes.h:253
unsigned char addr_space_t
Definition coretypes.h:174
var_init_status
Definition coretypes.h:303
@ VAR_INIT_STATUS_UNKNOWN
Definition coretypes.h:304
@ VAR_INIT_STATUS_UNINITIALIZED
Definition coretypes.h:305
@ VAR_INIT_STATUS_INITIALIZED
Definition coretypes.h:306
optimize_size_level
Definition coretypes.h:449
@ OPTIMIZE_SIZE_BALANCED
Definition coretypes.h:453
@ OPTIMIZE_SIZE_NO
Definition coretypes.h:451
@ OPTIMIZE_SIZE_MAX
Definition coretypes.h:455
class edge_def * edge
Definition coretypes.h:342
gimple * gimple_seq
Definition coretypes.h:100
offload_abi
Definition coretypes.h:215
@ OFFLOAD_ABI_UNSET
Definition coretypes.h:216
@ OFFLOAD_ABI_LP64
Definition coretypes.h:217
@ OFFLOAD_ABI_ILP32
Definition coretypes.h:218
pod_mode< scalar_mode > scalar_mode_pod
Definition coretypes.h:69
ir_type
Definition coretypes.h:181
@ IR_RTL_CFGRTL
Definition coretypes.h:183
@ IR_RTL_CFGLAYOUT
Definition coretypes.h:184
@ IR_GIMPLE
Definition coretypes.h:182
const struct rtvec_def * const_rtvec
Definition coretypes.h:92
tls_model
Definition coretypes.h:198
@ TLS_MODEL_NONE
Definition coretypes.h:199
@ TLS_MODEL_LOCAL_DYNAMIC
Definition coretypes.h:203
@ TLS_MODEL_LOCAL_EXEC
Definition coretypes.h:205
@ TLS_MODEL_INITIAL_EXEC
Definition coretypes.h:204
@ TLS_MODEL_EMULATED
Definition coretypes.h:200
@ TLS_MODEL_REAL
Definition coretypes.h:201
@ TLS_MODEL_GLOBAL_DYNAMIC
Definition coretypes.h:202
pod_mode< scalar_int_mode > scalar_int_mode_pod
Definition coretypes.h:70
stack_protector
Definition coretypes.h:236
@ SPCT_FLAG_STRONG
Definition coretypes.h:239
@ SPCT_FLAG_DEFAULT
Definition coretypes.h:237
@ SPCT_FLAG_ALL
Definition coretypes.h:238
@ SPCT_FLAG_EXPLICIT
Definition coretypes.h:240
unsigned char uchar
Definition coretypes.h:465
const struct rtx_def * const_rtx
Definition coretypes.h:58
std::pair< const char *, int > string_int_pair
Definition coretypes.h:375
function_class
Definition coretypes.h:408
@ function_c99_math_complex
Definition coretypes.h:411
@ function_c23_misc
Definition coretypes.h:414
@ function_sincos
Definition coretypes.h:412
@ function_c94
Definition coretypes.h:409
@ function_c11_misc
Definition coretypes.h:413
@ function_c99_misc
Definition coretypes.h:410
uint64_t gcov_type_unsigned
Definition coretypes.h:47
symbol_visibility
Definition coretypes.h:420
@ VISIBILITY_HIDDEN
Definition coretypes.h:423
@ VISIBILITY_DEFAULT
Definition coretypes.h:421
@ VISIBILITY_INTERNAL
Definition coretypes.h:424
@ VISIBILITY_PROTECTED
Definition coretypes.h:422
excess_precision_type
Definition coretypes.h:439
@ EXCESS_PRECISION_TYPE_STANDARD
Definition coretypes.h:441
@ EXCESS_PRECISION_TYPE_IMPLICIT
Definition coretypes.h:440
@ EXCESS_PRECISION_TYPE_FAST
Definition coretypes.h:442
@ EXCESS_PRECISION_TYPE_FLOAT16
Definition coretypes.h:443
struct hwivec_def * hwivec
Definition coretypes.h:94
struct simple_bitmap_def * sbitmap
Definition coretypes.h:54
std::pair< tree, tree > tree_pair
Definition coretypes.h:374
const class edge_def * const_edge
Definition coretypes.h:343
trampoline_impl
Definition coretypes.h:209
@ TRAMPOLINE_IMPL_STACK
Definition coretypes.h:210
@ TRAMPOLINE_IMPL_HEAP
Definition coretypes.h:211
profile_reproducibility
Definition coretypes.h:229
@ PROFILE_REPRODUCIBILITY_PARALLEL_RUNS
Definition coretypes.h:231
@ PROFILE_REPRODUCIBILITY_MULTITHREADED
Definition coretypes.h:232
@ PROFILE_REPRODUCIBILITY_SERIAL
Definition coretypes.h:230
pod_mode< fixed_size_mode > fixed_size_mode_pod
Definition coretypes.h:71
const struct simple_bitmap_def * const_sbitmap
Definition coretypes.h:55
opt_mode< scalar_int_mode > opt_scalar_int_mode
Definition coretypes.h:66
node_frequency
Definition coretypes.h:257
@ NODE_FREQUENCY_HOT
Definition coretypes.h:268
@ NODE_FREQUENCY_NORMAL
Definition coretypes.h:265
@ NODE_FREQUENCY_UNLIKELY_EXECUTED
Definition coretypes.h:260
@ NODE_FREQUENCY_EXECUTED_ONCE
Definition coretypes.h:263
pad_direction
Definition coretypes.h:284
@ PAD_DOWNWARD
Definition coretypes.h:296
@ PAD_NONE
Definition coretypes.h:286
@ PAD_UPWARD
Definition coretypes.h:291
const class bitmap_head * const_bitmap
Definition coretypes.h:52
profile_update
Definition coretypes.h:222
@ PROFILE_UPDATE_ATOMIC
Definition coretypes.h:224
@ PROFILE_UPDATE_SINGLE
Definition coretypes.h:223
@ PROFILE_UPDATE_PREFER_ATOMIC
Definition coretypes.h:225
flt_eval_method
Definition coretypes.h:430
@ FLT_EVAL_METHOD_PROMOTE_TO_FLOAT
Definition coretypes.h:432
@ FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16
Definition coretypes.h:435
@ FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE
Definition coretypes.h:434
@ FLT_EVAL_METHOD_UNPREDICTABLE
Definition coretypes.h:431
@ FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE
Definition coretypes.h:433
int reg_class_t
Definition coretypes.h:366
const struct basic_block_def * const_basic_block
Definition coretypes.h:346
const union tree_node * const_tree
Definition coretypes.h:98
const struct hwivec_def * const_hwivec
Definition coretypes.h:95
void(* gt_pointer_operator)(void *, void *, void *)
Definition coretypes.h:462
class bitmap_head * bitmap
Definition coretypes.h:51
int64_t gcov_type
Definition coretypes.h:46
warn_strict_overflow_code
Definition coretypes.h:312
@ WARN_STRICT_OVERFLOW_MAGNITUDE
Definition coretypes.h:330
@ WARN_STRICT_OVERFLOW_MISC
Definition coretypes.h:327
@ WARN_STRICT_OVERFLOW_COMPARISON
Definition coretypes.h:324
@ WARN_STRICT_OVERFLOW_CONDITIONAL
Definition coretypes.h:321
@ WARN_STRICT_OVERFLOW_ALL
Definition coretypes.h:316
opt_mode< scalar_mode > opt_scalar_mode
Definition coretypes.h:65
union tree_node * tree
Definition coretypes.h:97
optimization_type
Definition coretypes.h:272
@ OPTIMIZE_FOR_BOTH
Definition coretypes.h:277
@ OPTIMIZE_FOR_SPEED
Definition coretypes.h:274
@ OPTIMIZE_FOR_SIZE
Definition coretypes.h:280
int alias_set_type
Definition coretypes.h:339
struct rtvec_def * rtvec
Definition coretypes.h:91
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
Definition context.h:23
rtx_code
Definition rtl.h:48
Definition array-traits.h:35
Definition basic-block.h:117
Definition bitmap.h:294
Definition cgraph.h:875
Definition opts.h:250
Definition opts.h:325
Definition opts.h:69
Definition gimple.h:550
Definition gimple.h:904
Definition gimple.h:390
Definition gimple.h:353
Definition gimple.h:413
Definition gimple.h:858
Definition gimple.h:868
Definition gimple.h:495
Definition gimple.h:442
Definition gimple.h:427
Definition gimple.h:452
Definition gimple.h:877
Definition gimple-iterator.h:26
Definition gimple.h:225
Definition gimple.h:886
Definition gimple.h:760
Definition gimple.h:780
Definition gimple.h:709
Definition gimple.h:574
Definition gimple.h:606
Definition gimple.h:743
Definition gimple.h:655
Definition gimple.h:691
Definition gimple.h:731
Definition gimple.h:662
Definition gimple.h:670
Definition gimple.h:737
Definition gimple.h:462
Definition gimple.h:489
Definition gimple.h:914
Definition gimple.h:895
Definition gimple.h:834
Definition gimple.h:504
Definition rtl.h:282
Definition coretypes.h:380
const char *const name
Definition coretypes.h:381
const ValueType value
Definition coretypes.h:382
Definition machmode.h:345
Definition rtl.h:735
Definition rtl.h:667
Definition rtl.h:628
Definition rtl.h:678
Definition rtl.h:579
Definition rtl.h:311
Definition rtl.h:458
Definition rtl.h:479
Definition rtl.h:545
Definition rtl.h:601
Definition rtl.h:641
Definition rtl.h:590
Definition rtl.h:689
Definition rtl.h:512
Definition sbitmap.h:87
Definition cgraph.h:106
Definition cgraph.h:2000
Definition output.h:514