GCC Middle and Back End API Reference
stor-layout.h
Go to the documentation of this file.
1/* Definitions and declarations for stor-layout.cc.
2 Copyright (C) 2013-2026 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
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
19
20#ifndef GCC_STOR_LAYOUT_H
21#define GCC_STOR_LAYOUT_H
22
24extern void fixup_signed_type (tree);
25extern unsigned int update_alignment_for_field (record_layout_info, tree,
26 unsigned int);
27extern record_layout_info start_record_layout (tree);
28extern tree bit_from_pos (tree, tree);
29extern tree byte_from_pos (tree, tree);
30extern void pos_from_bit (tree *, tree *, unsigned int, tree);
31extern void normalize_offset (tree *, tree *, unsigned int);
32extern tree rli_size_unit_so_far (record_layout_info);
33extern tree rli_size_so_far (record_layout_info);
34extern void normalize_rli (record_layout_info);
35extern void place_field (record_layout_info, tree);
36extern void compute_record_mode (tree);
37extern void compute_array_mode (tree);
38extern void finish_bitfield_layout (tree);
39extern void finish_record_layout (record_layout_info, int);
40extern void finalize_size_functions (void);
41extern void fixup_unsigned_type (tree);
42extern void initialize_sizetypes (void);
43
44/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
45 fields. Optionally specify an alignment, and then lay it out. */
46extern void finish_builtin_struct (tree, const char *, tree, tree);
47
48/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
49 calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
50 fields. Call this only once for any given decl node.
51
52 Second argument is the boundary that this field can be assumed to
53 be starting at (in bits). Zero means it can be assumed aligned
54 on any boundary that may be needed. */
55extern void layout_decl (tree, unsigned);
56
57/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
58 TYPE_ALIGN and TYPE_MODE fields. If called more than once on one
59 node, does nothing except for the first time. */
60extern void layout_type (tree);
61
62/* Return the least alignment in bytes required for type TYPE. */
63extern unsigned int min_align_of_type (tree);
64
65/* Construct various nodes representing fract or accum data types. */
66extern tree make_fract_type (int, int, int);
67extern tree make_accum_type (int, int, int);
68
69#define make_signed_fract_type(P) make_fract_type (P, 0, 0)
70#define make_unsigned_fract_type(P) make_fract_type (P, 1, 0)
71#define make_sat_signed_fract_type(P) make_fract_type (P, 0, 1)
72#define make_sat_unsigned_fract_type(P) make_fract_type (P, 1, 1)
73#define make_signed_accum_type(P) make_accum_type (P, 0, 0)
74#define make_unsigned_accum_type(P) make_accum_type (P, 1, 0)
75#define make_sat_signed_accum_type(P) make_accum_type (P, 0, 1)
76#define make_sat_unsigned_accum_type(P) make_accum_type (P, 1, 1)
77
78#define make_or_reuse_signed_fract_type(P) \
79 make_or_reuse_fract_type (P, 0, 0)
80#define make_or_reuse_unsigned_fract_type(P) \
81 make_or_reuse_fract_type (P, 1, 0)
82#define make_or_reuse_sat_signed_fract_type(P) \
83 make_or_reuse_fract_type (P, 0, 1)
84#define make_or_reuse_sat_unsigned_fract_type(P) \
85 make_or_reuse_fract_type (P, 1, 1)
86#define make_or_reuse_signed_accum_type(P) \
87 make_or_reuse_accum_type (P, 0, 0)
88#define make_or_reuse_unsigned_accum_type(P) \
89 make_or_reuse_accum_type (P, 1, 0)
90#define make_or_reuse_sat_signed_accum_type(P) \
91 make_or_reuse_accum_type (P, 0, 1)
92#define make_or_reuse_sat_unsigned_accum_type(P) \
93 make_or_reuse_accum_type (P, 1, 1)
94
95extern tree make_signed_type (int);
96extern tree make_unsigned_type (int);
97
98/* Return the mode for data of a given size SIZE and mode class CLASS.
99 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
100 The value is BLKmode if no other mode is found. This is like
101 mode_for_size, but is passed a tree. */
103
104extern tree bitwise_type_for_mode (machine_mode);
105
107
108/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
109 a previous call to layout_decl and calls it again. */
110extern void relayout_decl (tree);
111
112/* variable_size (EXP) is like save_expr (EXP) except that it
113 is for the special case of something that is part of a
114 variable size for a data type. It makes special arrangements
115 to compute the value at the right time when the data type
116 belongs to a function parameter. */
117extern tree variable_size (tree);
118
119#endif // GCC_STOR_LAYOUT_H
const union tree_node * const_tree
Definition coretypes.h:98
union tree_node * tree
Definition coretypes.h:97
mode_class
Definition genmodes.cc:29
opt_mode< machine_mode > opt_machine_mode
Definition machmode.h:23
poly_int< NUM_POLY_INT_COEFFS, unsigned HOST_WIDE_INT > poly_uint64
Definition poly-int-types.h:25
signop
Definition signop.h:28
tree bitwise_type_for_mode(machine_mode mode)
Definition stor-layout.cc:462
void place_field(record_layout_info rli, tree field)
Definition stor-layout.cc:1285
void finalize_size_functions(void)
Definition stor-layout.cc:275
unsigned int update_alignment_for_field(record_layout_info rli, tree field, unsigned int known_align)
Definition stor-layout.cc:1065
record_layout_info start_record_layout(tree t)
Definition stor-layout.cc:872
opt_machine_mode bitwise_mode_for_size(poly_uint64 size)
Definition stor-layout.cc:484
void layout_decl(tree decl, unsigned int known_align)
Definition stor-layout.cc:661
tree variable_size(tree size)
Definition stor-layout.cc:67
void layout_type(tree type)
Definition stor-layout.cc:2437
tree make_signed_type(int precision)
Definition stor-layout.cc:2842
void finish_bitfield_layout(tree t)
Definition stor-layout.cc:2233
tree byte_from_pos(tree offset, tree bitpos)
Definition stor-layout.cc:952
tree rli_size_so_far(record_layout_info rli)
Definition stor-layout.cc:1054
tree rli_size_unit_so_far(record_layout_info rli)
Definition stor-layout.cc:1046
tree make_fract_type(int precision, int unsignedp, int satp)
Definition stor-layout.cc:2869
void finish_record_layout(record_layout_info rli, int free_p)
Definition stor-layout.cc:2320
void normalize_rli(record_layout_info rli)
Definition stor-layout.cc:1038
void set_min_and_max_values_for_integral_type(tree type, int precision, signop sgn)
Definition stor-layout.cc:2995
opt_machine_mode mode_for_size_tree(const_tree size, enum mode_class mclass, int limit)
Definition stor-layout.cc:327
tree make_unsigned_type(int precision)
Definition stor-layout.cc:2855
void normalize_offset(tree *poffset, tree *pbitpos, unsigned int off_align)
Definition stor-layout.cc:994
unsigned int min_align_of_type(tree type)
Definition stor-layout.cc:2821
tree make_accum_type(int precision, int unsignedp, int satp)
Definition stor-layout.cc:2891
void pos_from_bit(tree *poffset, tree *pbitpos, unsigned int off_align, tree pos)
Definition stor-layout.cc:967
void fixup_signed_type(tree type)
Definition stor-layout.cc:3018
void finish_builtin_struct(tree type, const char *name, tree fields, tree align_type)
Definition stor-layout.cc:2368
void compute_array_mode(tree type)
Definition stor-layout.cc:2402
tree bit_from_pos(tree offset, tree bitpos)
Definition stor-layout.cc:941
void compute_record_mode(tree type)
Definition stor-layout.cc:1872
void initialize_sizetypes(void)
Definition stor-layout.cc:2912
void fixup_unsigned_type(tree type)
Definition stor-layout.cc:3033
void relayout_decl(tree decl)
Definition stor-layout.cc:852