Merge trunk version 206575 into gupc branch.
[official-gcc.git] / gcc / stor-layout.c
blobe4a639a36de9d35bfce4c788cbf9041dd8436b63
1 /* C-compiler utilities for types and variables storage layout
2 Copyright (C) 1987-2014 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26 #include "stor-layout.h"
27 #include "stringpool.h"
28 #include "varasm.h"
29 #include "print-tree.h"
30 #include "rtl.h"
31 #include "tm_p.h"
32 #include "flags.h"
33 #include "function.h"
34 #include "expr.h"
35 #include "diagnostic-core.h"
36 #include "target.h"
37 #include "langhooks.h"
38 #include "regs.h"
39 #include "params.h"
40 #include "cgraph.h"
41 #include "tree-inline.h"
42 #include "tree-dump.h"
43 #include "gimplify.h"
45 /* Data type for the expressions representing sizes of data types.
46 It is the first integer type laid out. */
47 tree sizetype_tab[(int) stk_type_kind_last];
49 /* If nonzero, this is an upper limit on alignment of structure fields.
50 The value is measured in bits. */
51 unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
53 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
54 in the address spaces' address_mode, not pointer_mode. Set only by
55 internal_reference_types called only by a front end. */
56 static int reference_types_internal = 0;
58 static tree self_referential_size (tree);
59 static void finalize_record_size (record_layout_info);
60 static void finalize_type_size (tree);
61 static void place_union_field (record_layout_info, tree);
62 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
63 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
64 HOST_WIDE_INT, tree);
65 #endif
66 extern void debug_rli (record_layout_info);
68 /* Show that REFERENCE_TYPES are internal and should use address_mode.
69 Called only by front end. */
71 void
72 internal_reference_types (void)
74 reference_types_internal = 1;
77 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
78 to serve as the actual size-expression for a type or decl. */
80 tree
81 variable_size (tree size)
83 /* Obviously. */
84 if (TREE_CONSTANT (size))
85 return size;
87 /* If the size is self-referential, we can't make a SAVE_EXPR (see
88 save_expr for the rationale). But we can do something else. */
89 if (CONTAINS_PLACEHOLDER_P (size))
90 return self_referential_size (size);
92 /* If we are in the global binding level, we can't make a SAVE_EXPR
93 since it may end up being shared across functions, so it is up
94 to the front-end to deal with this case. */
95 if (lang_hooks.decls.global_bindings_p ())
96 return size;
98 return save_expr (size);
101 /* An array of functions used for self-referential size computation. */
102 static GTY(()) vec<tree, va_gc> *size_functions;
104 /* Similar to copy_tree_r but do not copy component references involving
105 PLACEHOLDER_EXPRs. These nodes are spotted in find_placeholder_in_expr
106 and substituted in substitute_in_expr. */
108 static tree
109 copy_self_referential_tree_r (tree *tp, int *walk_subtrees, void *data)
111 enum tree_code code = TREE_CODE (*tp);
113 /* Stop at types, decls, constants like copy_tree_r. */
114 if (TREE_CODE_CLASS (code) == tcc_type
115 || TREE_CODE_CLASS (code) == tcc_declaration
116 || TREE_CODE_CLASS (code) == tcc_constant)
118 *walk_subtrees = 0;
119 return NULL_TREE;
122 /* This is the pattern built in ada/make_aligning_type. */
123 else if (code == ADDR_EXPR
124 && TREE_CODE (TREE_OPERAND (*tp, 0)) == PLACEHOLDER_EXPR)
126 *walk_subtrees = 0;
127 return NULL_TREE;
130 /* Default case: the component reference. */
131 else if (code == COMPONENT_REF)
133 tree inner;
134 for (inner = TREE_OPERAND (*tp, 0);
135 REFERENCE_CLASS_P (inner);
136 inner = TREE_OPERAND (inner, 0))
139 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
141 *walk_subtrees = 0;
142 return NULL_TREE;
146 /* We're not supposed to have them in self-referential size trees
147 because we wouldn't properly control when they are evaluated.
148 However, not creating superfluous SAVE_EXPRs requires accurate
149 tracking of readonly-ness all the way down to here, which we
150 cannot always guarantee in practice. So punt in this case. */
151 else if (code == SAVE_EXPR)
152 return error_mark_node;
154 else if (code == STATEMENT_LIST)
155 gcc_unreachable ();
157 return copy_tree_r (tp, walk_subtrees, data);
160 /* Given a SIZE expression that is self-referential, return an equivalent
161 expression to serve as the actual size expression for a type. */
163 static tree
164 self_referential_size (tree size)
166 static unsigned HOST_WIDE_INT fnno = 0;
167 vec<tree> self_refs = vNULL;
168 tree param_type_list = NULL, param_decl_list = NULL;
169 tree t, ref, return_type, fntype, fnname, fndecl;
170 unsigned int i;
171 char buf[128];
172 vec<tree, va_gc> *args = NULL;
174 /* Do not factor out simple operations. */
175 t = skip_simple_constant_arithmetic (size);
176 if (TREE_CODE (t) == CALL_EXPR)
177 return size;
179 /* Collect the list of self-references in the expression. */
180 find_placeholder_in_expr (size, &self_refs);
181 gcc_assert (self_refs.length () > 0);
183 /* Obtain a private copy of the expression. */
184 t = size;
185 if (walk_tree (&t, copy_self_referential_tree_r, NULL, NULL) != NULL_TREE)
186 return size;
187 size = t;
189 /* Build the parameter and argument lists in parallel; also
190 substitute the former for the latter in the expression. */
191 vec_alloc (args, self_refs.length ());
192 FOR_EACH_VEC_ELT (self_refs, i, ref)
194 tree subst, param_name, param_type, param_decl;
196 if (DECL_P (ref))
198 /* We shouldn't have true variables here. */
199 gcc_assert (TREE_READONLY (ref));
200 subst = ref;
202 /* This is the pattern built in ada/make_aligning_type. */
203 else if (TREE_CODE (ref) == ADDR_EXPR)
204 subst = ref;
205 /* Default case: the component reference. */
206 else
207 subst = TREE_OPERAND (ref, 1);
209 sprintf (buf, "p%d", i);
210 param_name = get_identifier (buf);
211 param_type = TREE_TYPE (ref);
212 param_decl
213 = build_decl (input_location, PARM_DECL, param_name, param_type);
214 if (targetm.calls.promote_prototypes (NULL_TREE)
215 && INTEGRAL_TYPE_P (param_type)
216 && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node))
217 DECL_ARG_TYPE (param_decl) = integer_type_node;
218 else
219 DECL_ARG_TYPE (param_decl) = param_type;
220 DECL_ARTIFICIAL (param_decl) = 1;
221 TREE_READONLY (param_decl) = 1;
223 size = substitute_in_expr (size, subst, param_decl);
225 param_type_list = tree_cons (NULL_TREE, param_type, param_type_list);
226 param_decl_list = chainon (param_decl, param_decl_list);
227 args->quick_push (ref);
230 self_refs.release ();
232 /* Append 'void' to indicate that the number of parameters is fixed. */
233 param_type_list = tree_cons (NULL_TREE, void_type_node, param_type_list);
235 /* The 3 lists have been created in reverse order. */
236 param_type_list = nreverse (param_type_list);
237 param_decl_list = nreverse (param_decl_list);
239 /* Build the function type. */
240 return_type = TREE_TYPE (size);
241 fntype = build_function_type (return_type, param_type_list);
243 /* Build the function declaration. */
244 sprintf (buf, "SZ"HOST_WIDE_INT_PRINT_UNSIGNED, fnno++);
245 fnname = get_file_function_name (buf);
246 fndecl = build_decl (input_location, FUNCTION_DECL, fnname, fntype);
247 for (t = param_decl_list; t; t = DECL_CHAIN (t))
248 DECL_CONTEXT (t) = fndecl;
249 DECL_ARGUMENTS (fndecl) = param_decl_list;
250 DECL_RESULT (fndecl)
251 = build_decl (input_location, RESULT_DECL, 0, return_type);
252 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
254 /* The function has been created by the compiler and we don't
255 want to emit debug info for it. */
256 DECL_ARTIFICIAL (fndecl) = 1;
257 DECL_IGNORED_P (fndecl) = 1;
259 /* It is supposed to be "const" and never throw. */
260 TREE_READONLY (fndecl) = 1;
261 TREE_NOTHROW (fndecl) = 1;
263 /* We want it to be inlined when this is deemed profitable, as
264 well as discarded if every call has been integrated. */
265 DECL_DECLARED_INLINE_P (fndecl) = 1;
267 /* It is made up of a unique return statement. */
268 DECL_INITIAL (fndecl) = make_node (BLOCK);
269 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
270 t = build2 (MODIFY_EXPR, return_type, DECL_RESULT (fndecl), size);
271 DECL_SAVED_TREE (fndecl) = build1 (RETURN_EXPR, void_type_node, t);
272 TREE_STATIC (fndecl) = 1;
274 /* Put it onto the list of size functions. */
275 vec_safe_push (size_functions, fndecl);
277 /* Replace the original expression with a call to the size function. */
278 return build_call_expr_loc_vec (UNKNOWN_LOCATION, fndecl, args);
281 /* Take, queue and compile all the size functions. It is essential that
282 the size functions be gimplified at the very end of the compilation
283 in order to guarantee transparent handling of self-referential sizes.
284 Otherwise the GENERIC inliner would not be able to inline them back
285 at each of their call sites, thus creating artificial non-constant
286 size expressions which would trigger nasty problems later on. */
288 void
289 finalize_size_functions (void)
291 unsigned int i;
292 tree fndecl;
294 for (i = 0; size_functions && size_functions->iterate (i, &fndecl); i++)
296 allocate_struct_function (fndecl, false);
297 set_cfun (NULL);
298 dump_function (TDI_original, fndecl);
299 gimplify_function_tree (fndecl);
300 dump_function (TDI_generic, fndecl);
301 cgraph_finalize_function (fndecl, false);
304 vec_free (size_functions);
307 /* Return the machine mode to use for a nonscalar of SIZE bits. The
308 mode must be in class MCLASS, and have exactly that many value bits;
309 it may have padding as well. If LIMIT is nonzero, modes of wider
310 than MAX_FIXED_MODE_SIZE will not be used. */
312 enum machine_mode
313 mode_for_size (unsigned int size, enum mode_class mclass, int limit)
315 enum machine_mode mode;
317 if (limit && size > MAX_FIXED_MODE_SIZE)
318 return BLKmode;
320 /* Get the first mode which has this size, in the specified class. */
321 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
322 mode = GET_MODE_WIDER_MODE (mode))
323 if (GET_MODE_PRECISION (mode) == size)
324 return mode;
326 return BLKmode;
329 /* Similar, except passed a tree node. */
331 enum machine_mode
332 mode_for_size_tree (const_tree size, enum mode_class mclass, int limit)
334 unsigned HOST_WIDE_INT uhwi;
335 unsigned int ui;
337 if (!tree_fits_uhwi_p (size))
338 return BLKmode;
339 uhwi = tree_to_uhwi (size);
340 ui = uhwi;
341 if (uhwi != ui)
342 return BLKmode;
343 return mode_for_size (ui, mclass, limit);
346 /* Similar, but never return BLKmode; return the narrowest mode that
347 contains at least the requested number of value bits. */
349 enum machine_mode
350 smallest_mode_for_size (unsigned int size, enum mode_class mclass)
352 enum machine_mode mode;
354 /* Get the first mode which has at least this size, in the
355 specified class. */
356 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
357 mode = GET_MODE_WIDER_MODE (mode))
358 if (GET_MODE_PRECISION (mode) >= size)
359 return mode;
361 gcc_unreachable ();
364 /* Find an integer mode of the exact same size, or BLKmode on failure. */
366 enum machine_mode
367 int_mode_for_mode (enum machine_mode mode)
369 switch (GET_MODE_CLASS (mode))
371 case MODE_INT:
372 case MODE_PARTIAL_INT:
373 break;
375 case MODE_COMPLEX_INT:
376 case MODE_COMPLEX_FLOAT:
377 case MODE_FLOAT:
378 case MODE_DECIMAL_FLOAT:
379 case MODE_VECTOR_INT:
380 case MODE_VECTOR_FLOAT:
381 case MODE_FRACT:
382 case MODE_ACCUM:
383 case MODE_UFRACT:
384 case MODE_UACCUM:
385 case MODE_VECTOR_FRACT:
386 case MODE_VECTOR_ACCUM:
387 case MODE_VECTOR_UFRACT:
388 case MODE_VECTOR_UACCUM:
389 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
390 break;
392 case MODE_RANDOM:
393 if (mode == BLKmode)
394 break;
396 /* ... fall through ... */
398 case MODE_CC:
399 default:
400 gcc_unreachable ();
403 return mode;
406 /* Find a mode that is suitable for representing a vector with
407 NUNITS elements of mode INNERMODE. Returns BLKmode if there
408 is no suitable mode. */
410 enum machine_mode
411 mode_for_vector (enum machine_mode innermode, unsigned nunits)
413 enum machine_mode mode;
415 /* First, look for a supported vector type. */
416 if (SCALAR_FLOAT_MODE_P (innermode))
417 mode = MIN_MODE_VECTOR_FLOAT;
418 else if (SCALAR_FRACT_MODE_P (innermode))
419 mode = MIN_MODE_VECTOR_FRACT;
420 else if (SCALAR_UFRACT_MODE_P (innermode))
421 mode = MIN_MODE_VECTOR_UFRACT;
422 else if (SCALAR_ACCUM_MODE_P (innermode))
423 mode = MIN_MODE_VECTOR_ACCUM;
424 else if (SCALAR_UACCUM_MODE_P (innermode))
425 mode = MIN_MODE_VECTOR_UACCUM;
426 else
427 mode = MIN_MODE_VECTOR_INT;
429 /* Do not check vector_mode_supported_p here. We'll do that
430 later in vector_type_mode. */
431 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
432 if (GET_MODE_NUNITS (mode) == nunits
433 && GET_MODE_INNER (mode) == innermode)
434 break;
436 /* For integers, try mapping it to a same-sized scalar mode. */
437 if (mode == VOIDmode
438 && GET_MODE_CLASS (innermode) == MODE_INT)
439 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
440 MODE_INT, 0);
442 if (mode == VOIDmode
443 || (GET_MODE_CLASS (mode) == MODE_INT
444 && !have_regs_of_mode[mode]))
445 return BLKmode;
447 return mode;
450 /* Return the alignment of MODE. This will be bounded by 1 and
451 BIGGEST_ALIGNMENT. */
453 unsigned int
454 get_mode_alignment (enum machine_mode mode)
456 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
459 /* Return the precision of the mode, or for a complex or vector mode the
460 precision of the mode of its elements. */
462 unsigned int
463 element_precision (enum machine_mode mode)
465 if (COMPLEX_MODE_P (mode) || VECTOR_MODE_P (mode))
466 mode = GET_MODE_INNER (mode);
468 return GET_MODE_PRECISION (mode);
471 /* Return the natural mode of an array, given that it is SIZE bytes in
472 total and has elements of type ELEM_TYPE. */
474 static enum machine_mode
475 mode_for_array (tree elem_type, tree size)
477 tree elem_size;
478 unsigned HOST_WIDE_INT int_size, int_elem_size;
479 bool limit_p;
481 /* One-element arrays get the component type's mode. */
482 elem_size = TYPE_SIZE (elem_type);
483 if (simple_cst_equal (size, elem_size))
484 return TYPE_MODE (elem_type);
486 limit_p = true;
487 if (tree_fits_uhwi_p (size) && tree_fits_uhwi_p (elem_size))
489 int_size = tree_to_uhwi (size);
490 int_elem_size = tree_to_uhwi (elem_size);
491 if (int_elem_size > 0
492 && int_size % int_elem_size == 0
493 && targetm.array_mode_supported_p (TYPE_MODE (elem_type),
494 int_size / int_elem_size))
495 limit_p = false;
497 return mode_for_size_tree (size, MODE_INT, limit_p);
500 /* Subroutine of layout_decl: Force alignment required for the data type.
501 But if the decl itself wants greater alignment, don't override that. */
503 static inline void
504 do_type_align (tree type, tree decl)
506 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
508 DECL_ALIGN (decl) = TYPE_ALIGN (type);
509 if (TREE_CODE (decl) == FIELD_DECL)
510 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
514 /* Set the size, mode and alignment of a ..._DECL node.
515 TYPE_DECL does need this for C++.
516 Note that LABEL_DECL and CONST_DECL nodes do not need this,
517 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
518 Don't call layout_decl for them.
520 KNOWN_ALIGN is the amount of alignment we can assume this
521 decl has with no special effort. It is relevant only for FIELD_DECLs
522 and depends on the previous fields.
523 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
524 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
525 the record will be aligned to suit. */
527 void
528 layout_decl (tree decl, unsigned int known_align)
530 tree type = TREE_TYPE (decl);
531 enum tree_code code = TREE_CODE (decl);
532 rtx rtl = NULL_RTX;
533 location_t loc = DECL_SOURCE_LOCATION (decl);
535 if (code == CONST_DECL)
536 return;
538 gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
539 || code == TYPE_DECL ||code == FIELD_DECL);
541 rtl = DECL_RTL_IF_SET (decl);
543 if (type == error_mark_node)
544 type = void_type_node;
546 /* Usually the size and mode come from the data type without change,
547 however, the front-end may set the explicit width of the field, so its
548 size may not be the same as the size of its type. This happens with
549 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
550 also happens with other fields. For example, the C++ front-end creates
551 zero-sized fields corresponding to empty base classes, and depends on
552 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
553 size in bytes from the size in bits. If we have already set the mode,
554 don't set it again since we can be called twice for FIELD_DECLs. */
556 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
557 if (DECL_MODE (decl) == VOIDmode)
558 DECL_MODE (decl) = TYPE_MODE (type);
560 if (lang_hooks.decls.layout_decl_p (decl, type))
562 lang_hooks.decls.layout_decl (decl, type);
564 else if (DECL_SIZE (decl) == 0)
566 DECL_SIZE (decl) = TYPE_SIZE (type);
567 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
569 else if (DECL_SIZE_UNIT (decl) == 0)
570 DECL_SIZE_UNIT (decl)
571 = fold_convert_loc (loc, sizetype,
572 size_binop_loc (loc, CEIL_DIV_EXPR, DECL_SIZE (decl),
573 bitsize_unit_node));
575 if (code != FIELD_DECL)
576 /* For non-fields, update the alignment from the type. */
577 do_type_align (type, decl);
578 else
579 /* For fields, it's a bit more complicated... */
581 bool old_user_align = DECL_USER_ALIGN (decl);
582 bool zero_bitfield = false;
583 bool packed_p = DECL_PACKED (decl);
584 unsigned int mfa;
586 if (DECL_BIT_FIELD (decl))
588 DECL_BIT_FIELD_TYPE (decl) = type;
590 /* A zero-length bit-field affects the alignment of the next
591 field. In essence such bit-fields are not influenced by
592 any packing due to #pragma pack or attribute packed. */
593 if (integer_zerop (DECL_SIZE (decl))
594 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
596 zero_bitfield = true;
597 packed_p = false;
598 #ifdef PCC_BITFIELD_TYPE_MATTERS
599 if (PCC_BITFIELD_TYPE_MATTERS)
600 do_type_align (type, decl);
601 else
602 #endif
604 #ifdef EMPTY_FIELD_BOUNDARY
605 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
607 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
608 DECL_USER_ALIGN (decl) = 0;
610 #endif
614 /* See if we can use an ordinary integer mode for a bit-field.
615 Conditions are: a fixed size that is correct for another mode,
616 occupying a complete byte or bytes on proper boundary. */
617 if (TYPE_SIZE (type) != 0
618 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
619 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
621 enum machine_mode xmode
622 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
623 unsigned int xalign = GET_MODE_ALIGNMENT (xmode);
625 if (xmode != BLKmode
626 && !(xalign > BITS_PER_UNIT && DECL_PACKED (decl))
627 && (known_align == 0 || known_align >= xalign))
629 DECL_ALIGN (decl) = MAX (xalign, DECL_ALIGN (decl));
630 DECL_MODE (decl) = xmode;
631 DECL_BIT_FIELD (decl) = 0;
635 /* Turn off DECL_BIT_FIELD if we won't need it set. */
636 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
637 && known_align >= TYPE_ALIGN (type)
638 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
639 DECL_BIT_FIELD (decl) = 0;
641 else if (packed_p && DECL_USER_ALIGN (decl))
642 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
643 round up; we'll reduce it again below. We want packing to
644 supersede USER_ALIGN inherited from the type, but defer to
645 alignment explicitly specified on the field decl. */;
646 else
647 do_type_align (type, decl);
649 /* If the field is packed and not explicitly aligned, give it the
650 minimum alignment. Note that do_type_align may set
651 DECL_USER_ALIGN, so we need to check old_user_align instead. */
652 if (packed_p
653 && !old_user_align)
654 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
656 if (! packed_p && ! DECL_USER_ALIGN (decl))
658 /* Some targets (i.e. i386, VMS) limit struct field alignment
659 to a lower boundary than alignment of variables unless
660 it was overridden by attribute aligned. */
661 #ifdef BIGGEST_FIELD_ALIGNMENT
662 DECL_ALIGN (decl)
663 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
664 #endif
665 #ifdef ADJUST_FIELD_ALIGN
666 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
667 #endif
670 if (zero_bitfield)
671 mfa = initial_max_fld_align * BITS_PER_UNIT;
672 else
673 mfa = maximum_field_alignment;
674 /* Should this be controlled by DECL_USER_ALIGN, too? */
675 if (mfa != 0)
676 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
679 /* Evaluate nonconstant size only once, either now or as soon as safe. */
680 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
681 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
682 if (DECL_SIZE_UNIT (decl) != 0
683 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
684 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
686 /* If requested, warn about definitions of large data objects. */
687 if (warn_larger_than
688 && (code == VAR_DECL || code == PARM_DECL)
689 && ! DECL_EXTERNAL (decl))
691 tree size = DECL_SIZE_UNIT (decl);
693 if (size != 0 && TREE_CODE (size) == INTEGER_CST
694 && compare_tree_int (size, larger_than_size) > 0)
696 int size_as_int = TREE_INT_CST_LOW (size);
698 if (compare_tree_int (size, size_as_int) == 0)
699 warning (OPT_Wlarger_than_, "size of %q+D is %d bytes", decl, size_as_int);
700 else
701 warning (OPT_Wlarger_than_, "size of %q+D is larger than %wd bytes",
702 decl, larger_than_size);
706 /* If the RTL was already set, update its mode and mem attributes. */
707 if (rtl)
709 PUT_MODE (rtl, DECL_MODE (decl));
710 SET_DECL_RTL (decl, 0);
711 set_mem_attributes (rtl, decl, 1);
712 SET_DECL_RTL (decl, rtl);
716 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
717 a previous call to layout_decl and calls it again. */
719 void
720 relayout_decl (tree decl)
722 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
723 DECL_MODE (decl) = VOIDmode;
724 if (!DECL_USER_ALIGN (decl))
725 DECL_ALIGN (decl) = 0;
726 SET_DECL_RTL (decl, 0);
728 layout_decl (decl, 0);
731 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
732 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
733 is to be passed to all other layout functions for this record. It is the
734 responsibility of the caller to call `free' for the storage returned.
735 Note that garbage collection is not permitted until we finish laying
736 out the record. */
738 record_layout_info
739 start_record_layout (tree t)
741 record_layout_info rli = XNEW (struct record_layout_info_s);
743 rli->t = t;
745 /* If the type has a minimum specified alignment (via an attribute
746 declaration, for example) use it -- otherwise, start with a
747 one-byte alignment. */
748 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
749 rli->unpacked_align = rli->record_align;
750 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
752 #ifdef STRUCTURE_SIZE_BOUNDARY
753 /* Packed structures don't need to have minimum size. */
754 if (! TYPE_PACKED (t))
756 unsigned tmp;
758 /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
759 tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
760 if (maximum_field_alignment != 0)
761 tmp = MIN (tmp, maximum_field_alignment);
762 rli->record_align = MAX (rli->record_align, tmp);
764 #endif
766 rli->offset = size_zero_node;
767 rli->bitpos = bitsize_zero_node;
768 rli->prev_field = 0;
769 rli->pending_statics = 0;
770 rli->packed_maybe_necessary = 0;
771 rli->remaining_in_alignment = 0;
773 return rli;
776 /* Return the combined bit position for the byte offset OFFSET and the
777 bit position BITPOS.
779 These functions operate on byte and bit positions present in FIELD_DECLs
780 and assume that these expressions result in no (intermediate) overflow.
781 This assumption is necessary to fold the expressions as much as possible,
782 so as to avoid creating artificially variable-sized types in languages
783 supporting variable-sized types like Ada. */
785 tree
786 bit_from_pos (tree offset, tree bitpos)
788 if (TREE_CODE (offset) == PLUS_EXPR)
789 offset = size_binop (PLUS_EXPR,
790 fold_convert (bitsizetype, TREE_OPERAND (offset, 0)),
791 fold_convert (bitsizetype, TREE_OPERAND (offset, 1)));
792 else
793 offset = fold_convert (bitsizetype, offset);
794 return size_binop (PLUS_EXPR, bitpos,
795 size_binop (MULT_EXPR, offset, bitsize_unit_node));
798 /* Return the combined truncated byte position for the byte offset OFFSET and
799 the bit position BITPOS. */
801 tree
802 byte_from_pos (tree offset, tree bitpos)
804 tree bytepos;
805 if (TREE_CODE (bitpos) == MULT_EXPR
806 && tree_int_cst_equal (TREE_OPERAND (bitpos, 1), bitsize_unit_node))
807 bytepos = TREE_OPERAND (bitpos, 0);
808 else
809 bytepos = size_binop (TRUNC_DIV_EXPR, bitpos, bitsize_unit_node);
810 return size_binop (PLUS_EXPR, offset, fold_convert (sizetype, bytepos));
813 /* Split the bit position POS into a byte offset *POFFSET and a bit
814 position *PBITPOS with the byte offset aligned to OFF_ALIGN bits. */
816 void
817 pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
818 tree pos)
820 tree toff_align = bitsize_int (off_align);
821 if (TREE_CODE (pos) == MULT_EXPR
822 && tree_int_cst_equal (TREE_OPERAND (pos, 1), toff_align))
824 *poffset = size_binop (MULT_EXPR,
825 fold_convert (sizetype, TREE_OPERAND (pos, 0)),
826 size_int (off_align / BITS_PER_UNIT));
827 *pbitpos = bitsize_zero_node;
829 else
831 *poffset = size_binop (MULT_EXPR,
832 fold_convert (sizetype,
833 size_binop (FLOOR_DIV_EXPR, pos,
834 toff_align)),
835 size_int (off_align / BITS_PER_UNIT));
836 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, toff_align);
840 /* Given a pointer to bit and byte offsets and an offset alignment,
841 normalize the offsets so they are within the alignment. */
843 void
844 normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
846 /* If the bit position is now larger than it should be, adjust it
847 downwards. */
848 if (compare_tree_int (*pbitpos, off_align) >= 0)
850 tree offset, bitpos;
851 pos_from_bit (&offset, &bitpos, off_align, *pbitpos);
852 *poffset = size_binop (PLUS_EXPR, *poffset, offset);
853 *pbitpos = bitpos;
857 /* Print debugging information about the information in RLI. */
859 DEBUG_FUNCTION void
860 debug_rli (record_layout_info rli)
862 print_node_brief (stderr, "type", rli->t, 0);
863 print_node_brief (stderr, "\noffset", rli->offset, 0);
864 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
866 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
867 rli->record_align, rli->unpacked_align,
868 rli->offset_align);
870 /* The ms_struct code is the only that uses this. */
871 if (targetm.ms_bitfield_layout_p (rli->t))
872 fprintf (stderr, "remaining in alignment = %u\n", rli->remaining_in_alignment);
874 if (rli->packed_maybe_necessary)
875 fprintf (stderr, "packed may be necessary\n");
877 if (!vec_safe_is_empty (rli->pending_statics))
879 fprintf (stderr, "pending statics:\n");
880 debug_vec_tree (rli->pending_statics);
884 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
885 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
887 void
888 normalize_rli (record_layout_info rli)
890 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
893 /* Returns the size in bytes allocated so far. */
895 tree
896 rli_size_unit_so_far (record_layout_info rli)
898 return byte_from_pos (rli->offset, rli->bitpos);
901 /* Returns the size in bits allocated so far. */
903 tree
904 rli_size_so_far (record_layout_info rli)
906 return bit_from_pos (rli->offset, rli->bitpos);
909 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
910 the next available location within the record is given by KNOWN_ALIGN.
911 Update the variable alignment fields in RLI, and return the alignment
912 to give the FIELD. */
914 unsigned int
915 update_alignment_for_field (record_layout_info rli, tree field,
916 unsigned int known_align)
918 /* The alignment required for FIELD. */
919 unsigned int desired_align;
920 /* The type of this field. */
921 tree type = TREE_TYPE (field);
922 /* True if the field was explicitly aligned by the user. */
923 bool user_align;
924 bool is_bitfield;
926 /* Do not attempt to align an ERROR_MARK node */
927 if (TREE_CODE (type) == ERROR_MARK)
928 return 0;
930 /* Lay out the field so we know what alignment it needs. */
931 layout_decl (field, known_align);
932 desired_align = DECL_ALIGN (field);
933 user_align = DECL_USER_ALIGN (field);
935 is_bitfield = (type != error_mark_node
936 && DECL_BIT_FIELD_TYPE (field)
937 && ! integer_zerop (TYPE_SIZE (type)));
939 /* Record must have at least as much alignment as any field.
940 Otherwise, the alignment of the field within the record is
941 meaningless. */
942 if (targetm.ms_bitfield_layout_p (rli->t))
944 /* Here, the alignment of the underlying type of a bitfield can
945 affect the alignment of a record; even a zero-sized field
946 can do this. The alignment should be to the alignment of
947 the type, except that for zero-size bitfields this only
948 applies if there was an immediately prior, nonzero-size
949 bitfield. (That's the way it is, experimentally.) */
950 if ((!is_bitfield && !DECL_PACKED (field))
951 || ((DECL_SIZE (field) == NULL_TREE
952 || !integer_zerop (DECL_SIZE (field)))
953 ? !DECL_PACKED (field)
954 : (rli->prev_field
955 && DECL_BIT_FIELD_TYPE (rli->prev_field)
956 && ! integer_zerop (DECL_SIZE (rli->prev_field)))))
958 unsigned int type_align = TYPE_ALIGN (type);
959 type_align = MAX (type_align, desired_align);
960 if (maximum_field_alignment != 0)
961 type_align = MIN (type_align, maximum_field_alignment);
962 rli->record_align = MAX (rli->record_align, type_align);
963 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
966 #ifdef PCC_BITFIELD_TYPE_MATTERS
967 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
969 /* Named bit-fields cause the entire structure to have the
970 alignment implied by their type. Some targets also apply the same
971 rules to unnamed bitfields. */
972 if (DECL_NAME (field) != 0
973 || targetm.align_anon_bitfield ())
975 unsigned int type_align = TYPE_ALIGN (type);
977 #ifdef ADJUST_FIELD_ALIGN
978 if (! TYPE_USER_ALIGN (type))
979 type_align = ADJUST_FIELD_ALIGN (field, type_align);
980 #endif
982 /* Targets might chose to handle unnamed and hence possibly
983 zero-width bitfield. Those are not influenced by #pragmas
984 or packed attributes. */
985 if (integer_zerop (DECL_SIZE (field)))
987 if (initial_max_fld_align)
988 type_align = MIN (type_align,
989 initial_max_fld_align * BITS_PER_UNIT);
991 else if (maximum_field_alignment != 0)
992 type_align = MIN (type_align, maximum_field_alignment);
993 else if (DECL_PACKED (field))
994 type_align = MIN (type_align, BITS_PER_UNIT);
996 /* The alignment of the record is increased to the maximum
997 of the current alignment, the alignment indicated on the
998 field (i.e., the alignment specified by an __aligned__
999 attribute), and the alignment indicated by the type of
1000 the field. */
1001 rli->record_align = MAX (rli->record_align, desired_align);
1002 rli->record_align = MAX (rli->record_align, type_align);
1004 if (warn_packed)
1005 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1006 user_align |= TYPE_USER_ALIGN (type);
1009 #endif
1010 else
1012 rli->record_align = MAX (rli->record_align, desired_align);
1013 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1016 TYPE_USER_ALIGN (rli->t) |= user_align;
1018 return desired_align;
1021 /* Called from place_field to handle unions. */
1023 static void
1024 place_union_field (record_layout_info rli, tree field)
1026 update_alignment_for_field (rli, field, /*known_align=*/0);
1028 DECL_FIELD_OFFSET (field) = size_zero_node;
1029 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
1030 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
1032 /* If this is an ERROR_MARK return *after* having set the
1033 field at the start of the union. This helps when parsing
1034 invalid fields. */
1035 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK)
1036 return;
1038 /* We assume the union's size will be a multiple of a byte so we don't
1039 bother with BITPOS. */
1040 if (TREE_CODE (rli->t) == UNION_TYPE)
1041 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1042 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
1043 rli->offset = fold_build3 (COND_EXPR, sizetype, DECL_QUALIFIER (field),
1044 DECL_SIZE_UNIT (field), rli->offset);
1047 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
1048 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
1049 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
1050 units of alignment than the underlying TYPE. */
1051 static int
1052 excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
1053 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
1055 /* Note that the calculation of OFFSET might overflow; we calculate it so
1056 that we still get the right result as long as ALIGN is a power of two. */
1057 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
1059 offset = offset % align;
1060 return ((offset + size + align - 1) / align
1061 > tree_to_uhwi (TYPE_SIZE (type)) / align);
1063 #endif
1065 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
1066 is a FIELD_DECL to be added after those fields already present in
1067 T. (FIELD is not actually added to the TYPE_FIELDS list here;
1068 callers that desire that behavior must manually perform that step.) */
1070 void
1071 place_field (record_layout_info rli, tree field)
1073 /* The alignment required for FIELD. */
1074 unsigned int desired_align;
1075 /* The alignment FIELD would have if we just dropped it into the
1076 record as it presently stands. */
1077 unsigned int known_align;
1078 unsigned int actual_align;
1079 /* The type of this field. */
1080 tree type = TREE_TYPE (field);
1082 gcc_assert (TREE_CODE (field) != ERROR_MARK);
1084 /* If FIELD is static, then treat it like a separate variable, not
1085 really like a structure field. If it is a FUNCTION_DECL, it's a
1086 method. In both cases, all we do is lay out the decl, and we do
1087 it *after* the record is laid out. */
1088 if (TREE_CODE (field) == VAR_DECL)
1090 vec_safe_push (rli->pending_statics, field);
1091 return;
1094 /* Enumerators and enum types which are local to this class need not
1095 be laid out. Likewise for initialized constant fields. */
1096 else if (TREE_CODE (field) != FIELD_DECL)
1097 return;
1099 /* Unions are laid out very differently than records, so split
1100 that code off to another function. */
1101 else if (TREE_CODE (rli->t) != RECORD_TYPE)
1103 place_union_field (rli, field);
1104 return;
1107 else if (TREE_CODE (type) == ERROR_MARK)
1109 /* Place this field at the current allocation position, so we
1110 maintain monotonicity. */
1111 DECL_FIELD_OFFSET (field) = rli->offset;
1112 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1113 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1114 return;
1117 /* Work out the known alignment so far. Note that A & (-A) is the
1118 value of the least-significant bit in A that is one. */
1119 if (! integer_zerop (rli->bitpos))
1120 known_align = (tree_to_uhwi (rli->bitpos)
1121 & - tree_to_uhwi (rli->bitpos));
1122 else if (integer_zerop (rli->offset))
1123 known_align = 0;
1124 else if (tree_fits_uhwi_p (rli->offset))
1125 known_align = (BITS_PER_UNIT
1126 * (tree_to_uhwi (rli->offset)
1127 & - tree_to_uhwi (rli->offset)));
1128 else
1129 known_align = rli->offset_align;
1131 desired_align = update_alignment_for_field (rli, field, known_align);
1132 if (known_align == 0)
1133 known_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1135 if (warn_packed && DECL_PACKED (field))
1137 if (known_align >= TYPE_ALIGN (type))
1139 if (TYPE_ALIGN (type) > desired_align)
1141 if (STRICT_ALIGNMENT)
1142 warning (OPT_Wattributes, "packed attribute causes "
1143 "inefficient alignment for %q+D", field);
1144 /* Don't warn if DECL_PACKED was set by the type. */
1145 else if (!TYPE_PACKED (rli->t))
1146 warning (OPT_Wattributes, "packed attribute is "
1147 "unnecessary for %q+D", field);
1150 else
1151 rli->packed_maybe_necessary = 1;
1154 /* Does this field automatically have alignment it needs by virtue
1155 of the fields that precede it and the record's own alignment? */
1156 if (known_align < desired_align)
1158 /* No, we need to skip space before this field.
1159 Bump the cumulative size to multiple of field alignment. */
1161 if (!targetm.ms_bitfield_layout_p (rli->t)
1162 && DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION)
1163 warning (OPT_Wpadded, "padding struct to align %q+D", field);
1165 /* If the alignment is still within offset_align, just align
1166 the bit position. */
1167 if (desired_align < rli->offset_align)
1168 rli->bitpos = round_up (rli->bitpos, desired_align);
1169 else
1171 /* First adjust OFFSET by the partial bits, then align. */
1172 rli->offset
1173 = size_binop (PLUS_EXPR, rli->offset,
1174 fold_convert (sizetype,
1175 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1176 bitsize_unit_node)));
1177 rli->bitpos = bitsize_zero_node;
1179 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
1182 if (! TREE_CONSTANT (rli->offset))
1183 rli->offset_align = desired_align;
1184 if (targetm.ms_bitfield_layout_p (rli->t))
1185 rli->prev_field = NULL;
1188 /* Handle compatibility with PCC. Note that if the record has any
1189 variable-sized fields, we need not worry about compatibility. */
1190 #ifdef PCC_BITFIELD_TYPE_MATTERS
1191 if (PCC_BITFIELD_TYPE_MATTERS
1192 && ! targetm.ms_bitfield_layout_p (rli->t)
1193 && TREE_CODE (field) == FIELD_DECL
1194 && type != error_mark_node
1195 && DECL_BIT_FIELD (field)
1196 && (! DECL_PACKED (field)
1197 /* Enter for these packed fields only to issue a warning. */
1198 || TYPE_ALIGN (type) <= BITS_PER_UNIT)
1199 && maximum_field_alignment == 0
1200 && ! integer_zerop (DECL_SIZE (field))
1201 && tree_fits_uhwi_p (DECL_SIZE (field))
1202 && tree_fits_uhwi_p (rli->offset)
1203 && tree_fits_uhwi_p (TYPE_SIZE (type)))
1205 unsigned int type_align = TYPE_ALIGN (type);
1206 tree dsize = DECL_SIZE (field);
1207 HOST_WIDE_INT field_size = tree_to_uhwi (dsize);
1208 HOST_WIDE_INT offset = tree_to_uhwi (rli->offset);
1209 HOST_WIDE_INT bit_offset = tree_to_shwi (rli->bitpos);
1211 #ifdef ADJUST_FIELD_ALIGN
1212 if (! TYPE_USER_ALIGN (type))
1213 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1214 #endif
1216 /* A bit field may not span more units of alignment of its type
1217 than its type itself. Advance to next boundary if necessary. */
1218 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1220 if (DECL_PACKED (field))
1222 if (warn_packed_bitfield_compat == 1)
1223 inform
1224 (input_location,
1225 "offset of packed bit-field %qD has changed in GCC 4.4",
1226 field);
1228 else
1229 rli->bitpos = round_up (rli->bitpos, type_align);
1232 if (! DECL_PACKED (field))
1233 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1235 #endif
1237 #ifdef BITFIELD_NBYTES_LIMITED
1238 if (BITFIELD_NBYTES_LIMITED
1239 && ! targetm.ms_bitfield_layout_p (rli->t)
1240 && TREE_CODE (field) == FIELD_DECL
1241 && type != error_mark_node
1242 && DECL_BIT_FIELD_TYPE (field)
1243 && ! DECL_PACKED (field)
1244 && ! integer_zerop (DECL_SIZE (field))
1245 && tree_fits_uhwi_p (DECL_SIZE (field))
1246 && tree_fits_uhwi_p (rli->offset)
1247 && tree_fits_uhwi_p (TYPE_SIZE (type)))
1249 unsigned int type_align = TYPE_ALIGN (type);
1250 tree dsize = DECL_SIZE (field);
1251 HOST_WIDE_INT field_size = tree_to_uhwi (dsize);
1252 HOST_WIDE_INT offset = tree_to_uhwi (rli->offset);
1253 HOST_WIDE_INT bit_offset = tree_to_shwi (rli->bitpos);
1255 #ifdef ADJUST_FIELD_ALIGN
1256 if (! TYPE_USER_ALIGN (type))
1257 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1258 #endif
1260 if (maximum_field_alignment != 0)
1261 type_align = MIN (type_align, maximum_field_alignment);
1262 /* ??? This test is opposite the test in the containing if
1263 statement, so this code is unreachable currently. */
1264 else if (DECL_PACKED (field))
1265 type_align = MIN (type_align, BITS_PER_UNIT);
1267 /* A bit field may not span the unit of alignment of its type.
1268 Advance to next boundary if necessary. */
1269 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1270 rli->bitpos = round_up (rli->bitpos, type_align);
1272 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1274 #endif
1276 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1277 A subtlety:
1278 When a bit field is inserted into a packed record, the whole
1279 size of the underlying type is used by one or more same-size
1280 adjacent bitfields. (That is, if its long:3, 32 bits is
1281 used in the record, and any additional adjacent long bitfields are
1282 packed into the same chunk of 32 bits. However, if the size
1283 changes, a new field of that size is allocated.) In an unpacked
1284 record, this is the same as using alignment, but not equivalent
1285 when packing.
1287 Note: for compatibility, we use the type size, not the type alignment
1288 to determine alignment, since that matches the documentation */
1290 if (targetm.ms_bitfield_layout_p (rli->t))
1292 tree prev_saved = rli->prev_field;
1293 tree prev_type = prev_saved ? DECL_BIT_FIELD_TYPE (prev_saved) : NULL;
1295 /* This is a bitfield if it exists. */
1296 if (rli->prev_field)
1298 /* If both are bitfields, nonzero, and the same size, this is
1299 the middle of a run. Zero declared size fields are special
1300 and handled as "end of run". (Note: it's nonzero declared
1301 size, but equal type sizes!) (Since we know that both
1302 the current and previous fields are bitfields by the
1303 time we check it, DECL_SIZE must be present for both.) */
1304 if (DECL_BIT_FIELD_TYPE (field)
1305 && !integer_zerop (DECL_SIZE (field))
1306 && !integer_zerop (DECL_SIZE (rli->prev_field))
1307 && tree_fits_shwi_p (DECL_SIZE (rli->prev_field))
1308 && tree_fits_uhwi_p (TYPE_SIZE (type))
1309 && simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type)))
1311 /* We're in the middle of a run of equal type size fields; make
1312 sure we realign if we run out of bits. (Not decl size,
1313 type size!) */
1314 HOST_WIDE_INT bitsize = tree_to_uhwi (DECL_SIZE (field));
1316 if (rli->remaining_in_alignment < bitsize)
1318 HOST_WIDE_INT typesize = tree_to_uhwi (TYPE_SIZE (type));
1320 /* out of bits; bump up to next 'word'. */
1321 rli->bitpos
1322 = size_binop (PLUS_EXPR, rli->bitpos,
1323 bitsize_int (rli->remaining_in_alignment));
1324 rli->prev_field = field;
1325 if (typesize < bitsize)
1326 rli->remaining_in_alignment = 0;
1327 else
1328 rli->remaining_in_alignment = typesize - bitsize;
1330 else
1331 rli->remaining_in_alignment -= bitsize;
1333 else
1335 /* End of a run: if leaving a run of bitfields of the same type
1336 size, we have to "use up" the rest of the bits of the type
1337 size.
1339 Compute the new position as the sum of the size for the prior
1340 type and where we first started working on that type.
1341 Note: since the beginning of the field was aligned then
1342 of course the end will be too. No round needed. */
1344 if (!integer_zerop (DECL_SIZE (rli->prev_field)))
1346 rli->bitpos
1347 = size_binop (PLUS_EXPR, rli->bitpos,
1348 bitsize_int (rli->remaining_in_alignment));
1350 else
1351 /* We "use up" size zero fields; the code below should behave
1352 as if the prior field was not a bitfield. */
1353 prev_saved = NULL;
1355 /* Cause a new bitfield to be captured, either this time (if
1356 currently a bitfield) or next time we see one. */
1357 if (!DECL_BIT_FIELD_TYPE (field)
1358 || integer_zerop (DECL_SIZE (field)))
1359 rli->prev_field = NULL;
1362 normalize_rli (rli);
1365 /* If we're starting a new run of same type size bitfields
1366 (or a run of non-bitfields), set up the "first of the run"
1367 fields.
1369 That is, if the current field is not a bitfield, or if there
1370 was a prior bitfield the type sizes differ, or if there wasn't
1371 a prior bitfield the size of the current field is nonzero.
1373 Note: we must be sure to test ONLY the type size if there was
1374 a prior bitfield and ONLY for the current field being zero if
1375 there wasn't. */
1377 if (!DECL_BIT_FIELD_TYPE (field)
1378 || (prev_saved != NULL
1379 ? !simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type))
1380 : !integer_zerop (DECL_SIZE (field)) ))
1382 /* Never smaller than a byte for compatibility. */
1383 unsigned int type_align = BITS_PER_UNIT;
1385 /* (When not a bitfield), we could be seeing a flex array (with
1386 no DECL_SIZE). Since we won't be using remaining_in_alignment
1387 until we see a bitfield (and come by here again) we just skip
1388 calculating it. */
1389 if (DECL_SIZE (field) != NULL
1390 && tree_fits_uhwi_p (TYPE_SIZE (TREE_TYPE (field)))
1391 && tree_fits_uhwi_p (DECL_SIZE (field)))
1393 unsigned HOST_WIDE_INT bitsize
1394 = tree_to_uhwi (DECL_SIZE (field));
1395 unsigned HOST_WIDE_INT typesize
1396 = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (field)));
1398 if (typesize < bitsize)
1399 rli->remaining_in_alignment = 0;
1400 else
1401 rli->remaining_in_alignment = typesize - bitsize;
1404 /* Now align (conventionally) for the new type. */
1405 type_align = TYPE_ALIGN (TREE_TYPE (field));
1407 if (maximum_field_alignment != 0)
1408 type_align = MIN (type_align, maximum_field_alignment);
1410 rli->bitpos = round_up (rli->bitpos, type_align);
1412 /* If we really aligned, don't allow subsequent bitfields
1413 to undo that. */
1414 rli->prev_field = NULL;
1418 /* Offset so far becomes the position of this field after normalizing. */
1419 normalize_rli (rli);
1420 DECL_FIELD_OFFSET (field) = rli->offset;
1421 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1422 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1424 /* If this field ended up more aligned than we thought it would be (we
1425 approximate this by seeing if its position changed), lay out the field
1426 again; perhaps we can use an integral mode for it now. */
1427 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1428 actual_align = (tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field))
1429 & - tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field)));
1430 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1431 actual_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1432 else if (tree_fits_uhwi_p (DECL_FIELD_OFFSET (field)))
1433 actual_align = (BITS_PER_UNIT
1434 * (tree_to_uhwi (DECL_FIELD_OFFSET (field))
1435 & - tree_to_uhwi (DECL_FIELD_OFFSET (field))));
1436 else
1437 actual_align = DECL_OFFSET_ALIGN (field);
1438 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1439 store / extract bit field operations will check the alignment of the
1440 record against the mode of bit fields. */
1442 if (known_align != actual_align)
1443 layout_decl (field, actual_align);
1445 if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE (field))
1446 rli->prev_field = field;
1448 /* Now add size of this field to the size of the record. If the size is
1449 not constant, treat the field as being a multiple of bytes and just
1450 adjust the offset, resetting the bit position. Otherwise, apportion the
1451 size amongst the bit position and offset. First handle the case of an
1452 unspecified size, which can happen when we have an invalid nested struct
1453 definition, such as struct j { struct j { int i; } }. The error message
1454 is printed in finish_struct. */
1455 if (DECL_SIZE (field) == 0)
1456 /* Do nothing. */;
1457 else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
1458 || TREE_OVERFLOW (DECL_SIZE (field)))
1460 rli->offset
1461 = size_binop (PLUS_EXPR, rli->offset,
1462 fold_convert (sizetype,
1463 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1464 bitsize_unit_node)));
1465 rli->offset
1466 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1467 rli->bitpos = bitsize_zero_node;
1468 rli->offset_align = MIN (rli->offset_align, desired_align);
1470 else if (targetm.ms_bitfield_layout_p (rli->t))
1472 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1474 /* If we ended a bitfield before the full length of the type then
1475 pad the struct out to the full length of the last type. */
1476 if ((DECL_CHAIN (field) == NULL
1477 || TREE_CODE (DECL_CHAIN (field)) != FIELD_DECL)
1478 && DECL_BIT_FIELD_TYPE (field)
1479 && !integer_zerop (DECL_SIZE (field)))
1480 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
1481 bitsize_int (rli->remaining_in_alignment));
1483 normalize_rli (rli);
1485 else
1487 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1488 normalize_rli (rli);
1492 /* Assuming that all the fields have been laid out, this function uses
1493 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1494 indicated by RLI. */
1496 static void
1497 finalize_record_size (record_layout_info rli)
1499 tree unpadded_size, unpadded_size_unit;
1501 /* Now we want just byte and bit offsets, so set the offset alignment
1502 to be a byte and then normalize. */
1503 rli->offset_align = BITS_PER_UNIT;
1504 normalize_rli (rli);
1506 /* Determine the desired alignment. */
1507 #ifdef ROUND_TYPE_ALIGN
1508 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1509 rli->record_align);
1510 #else
1511 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1512 #endif
1514 /* Compute the size so far. Be sure to allow for extra bits in the
1515 size in bytes. We have guaranteed above that it will be no more
1516 than a single byte. */
1517 unpadded_size = rli_size_so_far (rli);
1518 unpadded_size_unit = rli_size_unit_so_far (rli);
1519 if (! integer_zerop (rli->bitpos))
1520 unpadded_size_unit
1521 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1523 /* Round the size up to be a multiple of the required alignment. */
1524 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1525 TYPE_SIZE_UNIT (rli->t)
1526 = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
1528 if (TREE_CONSTANT (unpadded_size)
1529 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
1530 && input_location != BUILTINS_LOCATION)
1531 warning (OPT_Wpadded, "padding struct size to alignment boundary");
1533 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1534 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1535 && TREE_CONSTANT (unpadded_size))
1537 tree unpacked_size;
1539 #ifdef ROUND_TYPE_ALIGN
1540 rli->unpacked_align
1541 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1542 #else
1543 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1544 #endif
1546 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1547 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1549 if (TYPE_NAME (rli->t))
1551 tree name;
1553 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1554 name = TYPE_NAME (rli->t);
1555 else
1556 name = DECL_NAME (TYPE_NAME (rli->t));
1558 if (STRICT_ALIGNMENT)
1559 warning (OPT_Wpacked, "packed attribute causes inefficient "
1560 "alignment for %qE", name);
1561 else
1562 warning (OPT_Wpacked,
1563 "packed attribute is unnecessary for %qE", name);
1565 else
1567 if (STRICT_ALIGNMENT)
1568 warning (OPT_Wpacked,
1569 "packed attribute causes inefficient alignment");
1570 else
1571 warning (OPT_Wpacked, "packed attribute is unnecessary");
1577 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1579 void
1580 compute_record_mode (tree type)
1582 tree field;
1583 enum machine_mode mode = VOIDmode;
1585 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1586 However, if possible, we use a mode that fits in a register
1587 instead, in order to allow for better optimization down the
1588 line. */
1589 SET_TYPE_MODE (type, BLKmode);
1591 if (! tree_fits_uhwi_p (TYPE_SIZE (type)))
1592 return;
1594 /* A record which has any BLKmode members must itself be
1595 BLKmode; it can't go in a register. Unless the member is
1596 BLKmode only because it isn't aligned. */
1597 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1599 if (TREE_CODE (field) != FIELD_DECL)
1600 continue;
1602 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1603 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1604 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1605 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1606 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
1607 || ! tree_fits_uhwi_p (bit_position (field))
1608 || DECL_SIZE (field) == 0
1609 || ! tree_fits_uhwi_p (DECL_SIZE (field)))
1610 return;
1612 /* If this field is the whole struct, remember its mode so
1613 that, say, we can put a double in a class into a DF
1614 register instead of forcing it to live in the stack. */
1615 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1616 mode = DECL_MODE (field);
1618 /* With some targets, it is sub-optimal to access an aligned
1619 BLKmode structure as a scalar. */
1620 if (targetm.member_type_forces_blk (field, mode))
1621 return;
1624 /* If we only have one real field; use its mode if that mode's size
1625 matches the type's size. This only applies to RECORD_TYPE. This
1626 does not apply to unions. */
1627 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
1628 && tree_fits_uhwi_p (TYPE_SIZE (type))
1629 && GET_MODE_BITSIZE (mode) == tree_to_uhwi (TYPE_SIZE (type)))
1630 SET_TYPE_MODE (type, mode);
1631 else
1632 SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1));
1634 /* If structure's known alignment is less than what the scalar
1635 mode would need, and it matters, then stick with BLKmode. */
1636 if (TYPE_MODE (type) != BLKmode
1637 && STRICT_ALIGNMENT
1638 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1639 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1641 /* If this is the only reason this type is BLKmode, then
1642 don't force containing types to be BLKmode. */
1643 TYPE_NO_FORCE_BLK (type) = 1;
1644 SET_TYPE_MODE (type, BLKmode);
1648 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1649 out. */
1651 static void
1652 finalize_type_size (tree type)
1654 /* Normally, use the alignment corresponding to the mode chosen.
1655 However, where strict alignment is not required, avoid
1656 over-aligning structures, since most compilers do not do this
1657 alignment. */
1659 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1660 && (STRICT_ALIGNMENT
1661 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1662 && TREE_CODE (type) != QUAL_UNION_TYPE
1663 && TREE_CODE (type) != ARRAY_TYPE)))
1665 unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1667 /* Don't override a larger alignment requirement coming from a user
1668 alignment of one of the fields. */
1669 if (mode_align >= TYPE_ALIGN (type))
1671 TYPE_ALIGN (type) = mode_align;
1672 TYPE_USER_ALIGN (type) = 0;
1676 /* Do machine-dependent extra alignment. */
1677 #ifdef ROUND_TYPE_ALIGN
1678 TYPE_ALIGN (type)
1679 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1680 #endif
1682 /* If we failed to find a simple way to calculate the unit size
1683 of the type, find it by division. */
1684 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1685 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1686 result will fit in sizetype. We will get more efficient code using
1687 sizetype, so we force a conversion. */
1688 TYPE_SIZE_UNIT (type)
1689 = fold_convert (sizetype,
1690 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1691 bitsize_unit_node));
1693 if (TYPE_SIZE (type) != 0)
1695 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1696 TYPE_SIZE_UNIT (type)
1697 = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN_UNIT (type));
1700 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1701 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1702 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1703 if (TYPE_SIZE_UNIT (type) != 0
1704 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1705 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1707 /* Also layout any other variants of the type. */
1708 if (TYPE_NEXT_VARIANT (type)
1709 || type != TYPE_MAIN_VARIANT (type))
1711 tree variant;
1712 /* Record layout info of this variant. */
1713 tree size = TYPE_SIZE (type);
1714 tree size_unit = TYPE_SIZE_UNIT (type);
1715 unsigned int align = TYPE_ALIGN (type);
1716 unsigned int user_align = TYPE_USER_ALIGN (type);
1717 enum machine_mode mode = TYPE_MODE (type);
1719 /* Copy it into all variants. */
1720 for (variant = TYPE_MAIN_VARIANT (type);
1721 variant != 0;
1722 variant = TYPE_NEXT_VARIANT (variant))
1724 TYPE_SIZE (variant) = size;
1725 TYPE_SIZE_UNIT (variant) = size_unit;
1726 TYPE_ALIGN (variant) = align;
1727 TYPE_USER_ALIGN (variant) = user_align;
1728 SET_TYPE_MODE (variant, mode);
1733 /* Return a new underlying object for a bitfield started with FIELD. */
1735 static tree
1736 start_bitfield_representative (tree field)
1738 tree repr = make_node (FIELD_DECL);
1739 DECL_FIELD_OFFSET (repr) = DECL_FIELD_OFFSET (field);
1740 /* Force the representative to begin at a BITS_PER_UNIT aligned
1741 boundary - C++ may use tail-padding of a base object to
1742 continue packing bits so the bitfield region does not start
1743 at bit zero (see g++.dg/abi/bitfield5.C for example).
1744 Unallocated bits may happen for other reasons as well,
1745 for example Ada which allows explicit bit-granular structure layout. */
1746 DECL_FIELD_BIT_OFFSET (repr)
1747 = size_binop (BIT_AND_EXPR,
1748 DECL_FIELD_BIT_OFFSET (field),
1749 bitsize_int (~(BITS_PER_UNIT - 1)));
1750 SET_DECL_OFFSET_ALIGN (repr, DECL_OFFSET_ALIGN (field));
1751 DECL_SIZE (repr) = DECL_SIZE (field);
1752 DECL_SIZE_UNIT (repr) = DECL_SIZE_UNIT (field);
1753 DECL_PACKED (repr) = DECL_PACKED (field);
1754 DECL_CONTEXT (repr) = DECL_CONTEXT (field);
1755 return repr;
1758 /* Finish up a bitfield group that was started by creating the underlying
1759 object REPR with the last field in the bitfield group FIELD. */
1761 static void
1762 finish_bitfield_representative (tree repr, tree field)
1764 unsigned HOST_WIDE_INT bitsize, maxbitsize;
1765 enum machine_mode mode;
1766 tree nextf, size;
1768 size = size_diffop (DECL_FIELD_OFFSET (field),
1769 DECL_FIELD_OFFSET (repr));
1770 gcc_assert (tree_fits_uhwi_p (size));
1771 bitsize = (tree_to_uhwi (size) * BITS_PER_UNIT
1772 + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field))
1773 - tree_to_uhwi (DECL_FIELD_BIT_OFFSET (repr))
1774 + tree_to_uhwi (DECL_SIZE (field)));
1776 /* Round up bitsize to multiples of BITS_PER_UNIT. */
1777 bitsize = (bitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1779 /* Now nothing tells us how to pad out bitsize ... */
1780 nextf = DECL_CHAIN (field);
1781 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
1782 nextf = DECL_CHAIN (nextf);
1783 if (nextf)
1785 tree maxsize;
1786 /* If there was an error, the field may be not laid out
1787 correctly. Don't bother to do anything. */
1788 if (TREE_TYPE (nextf) == error_mark_node)
1789 return;
1790 maxsize = size_diffop (DECL_FIELD_OFFSET (nextf),
1791 DECL_FIELD_OFFSET (repr));
1792 if (tree_fits_uhwi_p (maxsize))
1794 maxbitsize = (tree_to_uhwi (maxsize) * BITS_PER_UNIT
1795 + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (nextf))
1796 - tree_to_uhwi (DECL_FIELD_BIT_OFFSET (repr)));
1797 /* If the group ends within a bitfield nextf does not need to be
1798 aligned to BITS_PER_UNIT. Thus round up. */
1799 maxbitsize = (maxbitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1801 else
1802 maxbitsize = bitsize;
1804 else
1806 /* ??? If you consider that tail-padding of this struct might be
1807 re-used when deriving from it we cannot really do the following
1808 and thus need to set maxsize to bitsize? Also we cannot
1809 generally rely on maxsize to fold to an integer constant, so
1810 use bitsize as fallback for this case. */
1811 tree maxsize = size_diffop (TYPE_SIZE_UNIT (DECL_CONTEXT (field)),
1812 DECL_FIELD_OFFSET (repr));
1813 if (tree_fits_uhwi_p (maxsize))
1814 maxbitsize = (tree_to_uhwi (maxsize) * BITS_PER_UNIT
1815 - tree_to_uhwi (DECL_FIELD_BIT_OFFSET (repr)));
1816 else
1817 maxbitsize = bitsize;
1820 /* Only if we don't artificially break up the representative in
1821 the middle of a large bitfield with different possibly
1822 overlapping representatives. And all representatives start
1823 at byte offset. */
1824 gcc_assert (maxbitsize % BITS_PER_UNIT == 0);
1826 /* Find the smallest nice mode to use. */
1827 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1828 mode = GET_MODE_WIDER_MODE (mode))
1829 if (GET_MODE_BITSIZE (mode) >= bitsize)
1830 break;
1831 if (mode != VOIDmode
1832 && (GET_MODE_BITSIZE (mode) > maxbitsize
1833 || GET_MODE_BITSIZE (mode) > MAX_FIXED_MODE_SIZE))
1834 mode = VOIDmode;
1836 if (mode == VOIDmode)
1838 /* We really want a BLKmode representative only as a last resort,
1839 considering the member b in
1840 struct { int a : 7; int b : 17; int c; } __attribute__((packed));
1841 Otherwise we simply want to split the representative up
1842 allowing for overlaps within the bitfield region as required for
1843 struct { int a : 7; int b : 7;
1844 int c : 10; int d; } __attribute__((packed));
1845 [0, 15] HImode for a and b, [8, 23] HImode for c. */
1846 DECL_SIZE (repr) = bitsize_int (bitsize);
1847 DECL_SIZE_UNIT (repr) = size_int (bitsize / BITS_PER_UNIT);
1848 DECL_MODE (repr) = BLKmode;
1849 TREE_TYPE (repr) = build_array_type_nelts (unsigned_char_type_node,
1850 bitsize / BITS_PER_UNIT);
1852 else
1854 unsigned HOST_WIDE_INT modesize = GET_MODE_BITSIZE (mode);
1855 DECL_SIZE (repr) = bitsize_int (modesize);
1856 DECL_SIZE_UNIT (repr) = size_int (modesize / BITS_PER_UNIT);
1857 DECL_MODE (repr) = mode;
1858 TREE_TYPE (repr) = lang_hooks.types.type_for_mode (mode, 1);
1861 /* Remember whether the bitfield group is at the end of the
1862 structure or not. */
1863 DECL_CHAIN (repr) = nextf;
1866 /* Compute and set FIELD_DECLs for the underlying objects we should
1867 use for bitfield access for the structure laid out with RLI. */
1869 static void
1870 finish_bitfield_layout (record_layout_info rli)
1872 tree field, prev;
1873 tree repr = NULL_TREE;
1875 /* Unions would be special, for the ease of type-punning optimizations
1876 we could use the underlying type as hint for the representative
1877 if the bitfield would fit and the representative would not exceed
1878 the union in size. */
1879 if (TREE_CODE (rli->t) != RECORD_TYPE)
1880 return;
1882 for (prev = NULL_TREE, field = TYPE_FIELDS (rli->t);
1883 field; field = DECL_CHAIN (field))
1885 if (TREE_CODE (field) != FIELD_DECL)
1886 continue;
1888 /* In the C++ memory model, consecutive bit fields in a structure are
1889 considered one memory location and updating a memory location
1890 may not store into adjacent memory locations. */
1891 if (!repr
1892 && DECL_BIT_FIELD_TYPE (field))
1894 /* Start new representative. */
1895 repr = start_bitfield_representative (field);
1897 else if (repr
1898 && ! DECL_BIT_FIELD_TYPE (field))
1900 /* Finish off new representative. */
1901 finish_bitfield_representative (repr, prev);
1902 repr = NULL_TREE;
1904 else if (DECL_BIT_FIELD_TYPE (field))
1906 gcc_assert (repr != NULL_TREE);
1908 /* Zero-size bitfields finish off a representative and
1909 do not have a representative themselves. This is
1910 required by the C++ memory model. */
1911 if (integer_zerop (DECL_SIZE (field)))
1913 finish_bitfield_representative (repr, prev);
1914 repr = NULL_TREE;
1917 /* We assume that either DECL_FIELD_OFFSET of the representative
1918 and each bitfield member is a constant or they are equal.
1919 This is because we need to be able to compute the bit-offset
1920 of each field relative to the representative in get_bit_range
1921 during RTL expansion.
1922 If these constraints are not met, simply force a new
1923 representative to be generated. That will at most
1924 generate worse code but still maintain correctness with
1925 respect to the C++ memory model. */
1926 else if (!((tree_fits_uhwi_p (DECL_FIELD_OFFSET (repr))
1927 && tree_fits_uhwi_p (DECL_FIELD_OFFSET (field)))
1928 || operand_equal_p (DECL_FIELD_OFFSET (repr),
1929 DECL_FIELD_OFFSET (field), 0)))
1931 finish_bitfield_representative (repr, prev);
1932 repr = start_bitfield_representative (field);
1935 else
1936 continue;
1938 if (repr)
1939 DECL_BIT_FIELD_REPRESENTATIVE (field) = repr;
1941 prev = field;
1944 if (repr)
1945 finish_bitfield_representative (repr, prev);
1948 /* Do all of the work required to layout the type indicated by RLI,
1949 once the fields have been laid out. This function will call `free'
1950 for RLI, unless FREE_P is false. Passing a value other than false
1951 for FREE_P is bad practice; this option only exists to support the
1952 G++ 3.2 ABI. */
1954 void
1955 finish_record_layout (record_layout_info rli, int free_p)
1957 tree variant;
1959 /* Compute the final size. */
1960 finalize_record_size (rli);
1962 /* Compute the TYPE_MODE for the record. */
1963 compute_record_mode (rli->t);
1965 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1966 finalize_type_size (rli->t);
1968 /* Compute bitfield representatives. */
1969 finish_bitfield_layout (rli);
1971 /* Propagate TYPE_PACKED to variants. With C++ templates,
1972 handle_packed_attribute is too early to do this. */
1973 for (variant = TYPE_NEXT_VARIANT (rli->t); variant;
1974 variant = TYPE_NEXT_VARIANT (variant))
1975 TYPE_PACKED (variant) = TYPE_PACKED (rli->t);
1977 /* Lay out any static members. This is done now because their type
1978 may use the record's type. */
1979 while (!vec_safe_is_empty (rli->pending_statics))
1980 layout_decl (rli->pending_statics->pop (), 0);
1982 /* Clean up. */
1983 if (free_p)
1985 vec_free (rli->pending_statics);
1986 free (rli);
1991 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
1992 NAME, its fields are chained in reverse on FIELDS.
1994 If ALIGN_TYPE is non-null, it is given the same alignment as
1995 ALIGN_TYPE. */
1997 void
1998 finish_builtin_struct (tree type, const char *name, tree fields,
1999 tree align_type)
2001 tree tail, next;
2003 for (tail = NULL_TREE; fields; tail = fields, fields = next)
2005 DECL_FIELD_CONTEXT (fields) = type;
2006 next = DECL_CHAIN (fields);
2007 DECL_CHAIN (fields) = tail;
2009 TYPE_FIELDS (type) = tail;
2011 if (align_type)
2013 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
2014 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
2017 layout_type (type);
2018 #if 0 /* not yet, should get fixed properly later */
2019 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
2020 #else
2021 TYPE_NAME (type) = build_decl (BUILTINS_LOCATION,
2022 TYPE_DECL, get_identifier (name), type);
2023 #endif
2024 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2025 layout_decl (TYPE_NAME (type), 0);
2028 /* Calculate the mode, size, and alignment for TYPE.
2029 For an array type, calculate the element separation as well.
2030 Record TYPE on the chain of permanent or temporary types
2031 so that dbxout will find out about it.
2033 TYPE_SIZE of a type is nonzero if the type has been laid out already.
2034 layout_type does nothing on such a type.
2036 If the type is incomplete, its TYPE_SIZE remains zero. */
2038 void
2039 layout_type (tree type)
2041 gcc_assert (type);
2043 if (type == error_mark_node)
2044 return;
2046 /* Do nothing if type has been laid out before. */
2047 if (TYPE_SIZE (type))
2048 return;
2050 switch (TREE_CODE (type))
2052 case LANG_TYPE:
2053 /* This kind of type is the responsibility
2054 of the language-specific code. */
2055 gcc_unreachable ();
2057 case BOOLEAN_TYPE:
2058 case INTEGER_TYPE:
2059 case ENUMERAL_TYPE:
2060 SET_TYPE_MODE (type,
2061 smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
2062 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2063 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2064 break;
2066 case REAL_TYPE:
2067 SET_TYPE_MODE (type,
2068 mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0));
2069 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2070 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2071 break;
2073 case FIXED_POINT_TYPE:
2074 /* TYPE_MODE (type) has been set already. */
2075 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2076 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2077 break;
2079 case COMPLEX_TYPE:
2080 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2081 SET_TYPE_MODE (type,
2082 mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
2083 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
2084 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
2085 0));
2086 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2087 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2088 break;
2090 case VECTOR_TYPE:
2092 int nunits = TYPE_VECTOR_SUBPARTS (type);
2093 tree innertype = TREE_TYPE (type);
2095 gcc_assert (!(nunits & (nunits - 1)));
2097 /* Find an appropriate mode for the vector type. */
2098 if (TYPE_MODE (type) == VOIDmode)
2099 SET_TYPE_MODE (type,
2100 mode_for_vector (TYPE_MODE (innertype), nunits));
2102 TYPE_SATURATING (type) = TYPE_SATURATING (TREE_TYPE (type));
2103 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2104 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
2105 TYPE_SIZE_UNIT (innertype),
2106 size_int (nunits));
2107 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
2108 bitsize_int (nunits));
2110 /* For vector types, we do not default to the mode's alignment.
2111 Instead, query a target hook, defaulting to natural alignment.
2112 This prevents ABI changes depending on whether or not native
2113 vector modes are supported. */
2114 TYPE_ALIGN (type) = targetm.vector_alignment (type);
2116 /* However, if the underlying mode requires a bigger alignment than
2117 what the target hook provides, we cannot use the mode. For now,
2118 simply reject that case. */
2119 gcc_assert (TYPE_ALIGN (type)
2120 >= GET_MODE_ALIGNMENT (TYPE_MODE (type)));
2121 break;
2124 case VOID_TYPE:
2125 /* This is an incomplete type and so doesn't have a size. */
2126 TYPE_ALIGN (type) = 1;
2127 TYPE_USER_ALIGN (type) = 0;
2128 SET_TYPE_MODE (type, VOIDmode);
2129 break;
2131 case OFFSET_TYPE:
2132 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
2133 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
2134 /* A pointer might be MODE_PARTIAL_INT,
2135 but ptrdiff_t must be integral. */
2136 SET_TYPE_MODE (type, mode_for_size (POINTER_SIZE, MODE_INT, 0));
2137 TYPE_PRECISION (type) = POINTER_SIZE;
2138 break;
2140 case FUNCTION_TYPE:
2141 case METHOD_TYPE:
2142 /* It's hard to see what the mode and size of a function ought to
2143 be, but we do know the alignment is FUNCTION_BOUNDARY, so
2144 make it consistent with that. */
2145 SET_TYPE_MODE (type, mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0));
2146 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
2147 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2148 break;
2150 case POINTER_TYPE:
2151 case REFERENCE_TYPE:
2153 enum machine_mode mode = TYPE_MODE (type);
2154 if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
2156 addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
2157 mode = targetm.addr_space.address_mode (as);
2160 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
2161 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
2162 TYPE_UNSIGNED (type) = 1;
2163 TYPE_PRECISION (type) = GET_MODE_BITSIZE (mode);
2165 break;
2167 case ARRAY_TYPE:
2169 tree index = TYPE_DOMAIN (type);
2170 tree element = TREE_TYPE (type);
2172 build_pointer_type (element);
2174 /* We need to know both bounds in order to compute the size. */
2175 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
2176 && TYPE_SIZE (element))
2178 tree ub = TYPE_MAX_VALUE (index);
2179 tree lb = TYPE_MIN_VALUE (index);
2180 tree element_size = TYPE_SIZE (element);
2181 tree length;
2183 /* Make sure that an array of zero-sized element is zero-sized
2184 regardless of its extent. */
2185 if (integer_zerop (element_size))
2186 length = size_zero_node;
2188 /* The computation should happen in the original signedness so
2189 that (possible) negative values are handled appropriately
2190 when determining overflow. */
2191 else
2193 /* ??? When it is obvious that the range is signed
2194 represent it using ssizetype. */
2195 if (TREE_CODE (lb) == INTEGER_CST
2196 && TREE_CODE (ub) == INTEGER_CST
2197 && TYPE_UNSIGNED (TREE_TYPE (lb))
2198 && tree_int_cst_lt (ub, lb))
2200 unsigned prec = TYPE_PRECISION (TREE_TYPE (lb));
2201 lb = double_int_to_tree
2202 (ssizetype,
2203 tree_to_double_int (lb).sext (prec));
2204 ub = double_int_to_tree
2205 (ssizetype,
2206 tree_to_double_int (ub).sext (prec));
2208 length
2209 = fold_convert (sizetype,
2210 size_binop (PLUS_EXPR,
2211 build_int_cst (TREE_TYPE (lb), 1),
2212 size_binop (MINUS_EXPR, ub, lb)));
2215 /* ??? We have no way to distinguish a null-sized array from an
2216 array spanning the whole sizetype range, so we arbitrarily
2217 decide that [0, -1] is the only valid representation. */
2218 if (integer_zerop (length)
2219 && TREE_OVERFLOW (length)
2220 && integer_zerop (lb))
2221 length = size_zero_node;
2223 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
2224 fold_convert (bitsizetype,
2225 length));
2227 /* If we know the size of the element, calculate the total size
2228 directly, rather than do some division thing below. This
2229 optimization helps Fortran assumed-size arrays (where the
2230 size of the array is determined at runtime) substantially. */
2231 if (TYPE_SIZE_UNIT (element))
2232 TYPE_SIZE_UNIT (type)
2233 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
2236 /* Now round the alignment and size,
2237 using machine-dependent criteria if any. */
2239 #ifdef ROUND_TYPE_ALIGN
2240 TYPE_ALIGN (type)
2241 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
2242 #else
2243 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
2244 #endif
2245 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
2246 SET_TYPE_MODE (type, BLKmode);
2247 if (TYPE_SIZE (type) != 0
2248 && ! targetm.member_type_forces_blk (type, VOIDmode)
2249 /* BLKmode elements force BLKmode aggregate;
2250 else extract/store fields may lose. */
2251 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
2252 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
2254 SET_TYPE_MODE (type, mode_for_array (TREE_TYPE (type),
2255 TYPE_SIZE (type)));
2256 if (TYPE_MODE (type) != BLKmode
2257 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
2258 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
2260 TYPE_NO_FORCE_BLK (type) = 1;
2261 SET_TYPE_MODE (type, BLKmode);
2264 /* When the element size is constant, check that it is at least as
2265 large as the element alignment. */
2266 if (TYPE_SIZE_UNIT (element)
2267 && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
2268 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
2269 TYPE_ALIGN_UNIT. */
2270 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element))
2271 && !integer_zerop (TYPE_SIZE_UNIT (element))
2272 && compare_tree_int (TYPE_SIZE_UNIT (element),
2273 TYPE_ALIGN_UNIT (element)) < 0)
2274 error ("alignment of array elements is greater than element size");
2275 break;
2278 case RECORD_TYPE:
2279 case UNION_TYPE:
2280 case QUAL_UNION_TYPE:
2282 tree field;
2283 record_layout_info rli;
2285 /* Initialize the layout information. */
2286 rli = start_record_layout (type);
2288 /* If this is a QUAL_UNION_TYPE, we want to process the fields
2289 in the reverse order in building the COND_EXPR that denotes
2290 its size. We reverse them again later. */
2291 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2292 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2294 /* Place all the fields. */
2295 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2296 place_field (rli, field);
2298 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2299 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2301 /* Finish laying out the record. */
2302 finish_record_layout (rli, /*free_p=*/true);
2304 break;
2306 default:
2307 gcc_unreachable ();
2310 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
2311 records and unions, finish_record_layout already called this
2312 function. */
2313 if (TREE_CODE (type) != RECORD_TYPE
2314 && TREE_CODE (type) != UNION_TYPE
2315 && TREE_CODE (type) != QUAL_UNION_TYPE)
2316 finalize_type_size (type);
2318 /* We should never see alias sets on incomplete aggregates. And we
2319 should not call layout_type on not incomplete aggregates. */
2320 if (AGGREGATE_TYPE_P (type))
2321 gcc_assert (!TYPE_ALIAS_SET_KNOWN_P (type));
2324 /* Vector types need to re-check the target flags each time we report
2325 the machine mode. We need to do this because attribute target can
2326 change the result of vector_mode_supported_p and have_regs_of_mode
2327 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
2328 change on a per-function basis. */
2329 /* ??? Possibly a better solution is to run through all the types
2330 referenced by a function and re-compute the TYPE_MODE once, rather
2331 than make the TYPE_MODE macro call a function. */
2333 enum machine_mode
2334 vector_type_mode (const_tree t)
2336 enum machine_mode mode;
2338 gcc_assert (TREE_CODE (t) == VECTOR_TYPE);
2340 mode = t->type_common.mode;
2341 if (VECTOR_MODE_P (mode)
2342 && (!targetm.vector_mode_supported_p (mode)
2343 || !have_regs_of_mode[mode]))
2345 enum machine_mode innermode = TREE_TYPE (t)->type_common.mode;
2347 /* For integers, try mapping it to a same-sized scalar mode. */
2348 if (GET_MODE_CLASS (innermode) == MODE_INT)
2350 mode = mode_for_size (TYPE_VECTOR_SUBPARTS (t)
2351 * GET_MODE_BITSIZE (innermode), MODE_INT, 0);
2353 if (mode != VOIDmode && have_regs_of_mode[mode])
2354 return mode;
2357 return BLKmode;
2360 return mode;
2363 /* Create and return a type for signed integers of PRECISION bits. */
2365 tree
2366 make_signed_type (int precision)
2368 tree type = make_node (INTEGER_TYPE);
2370 TYPE_PRECISION (type) = precision;
2372 fixup_signed_type (type);
2373 return type;
2376 /* Create and return a type for unsigned integers of PRECISION bits. */
2378 tree
2379 make_unsigned_type (int precision)
2381 tree type = make_node (INTEGER_TYPE);
2383 TYPE_PRECISION (type) = precision;
2385 fixup_unsigned_type (type);
2386 return type;
2389 /* Create and return a type for fract of PRECISION bits, UNSIGNEDP,
2390 and SATP. */
2392 tree
2393 make_fract_type (int precision, int unsignedp, int satp)
2395 tree type = make_node (FIXED_POINT_TYPE);
2397 TYPE_PRECISION (type) = precision;
2399 if (satp)
2400 TYPE_SATURATING (type) = 1;
2402 /* Lay out the type: set its alignment, size, etc. */
2403 if (unsignedp)
2405 TYPE_UNSIGNED (type) = 1;
2406 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UFRACT, 0));
2408 else
2409 SET_TYPE_MODE (type, mode_for_size (precision, MODE_FRACT, 0));
2410 layout_type (type);
2412 return type;
2415 /* Create and return a type for accum of PRECISION bits, UNSIGNEDP,
2416 and SATP. */
2418 tree
2419 make_accum_type (int precision, int unsignedp, int satp)
2421 tree type = make_node (FIXED_POINT_TYPE);
2423 TYPE_PRECISION (type) = precision;
2425 if (satp)
2426 TYPE_SATURATING (type) = 1;
2428 /* Lay out the type: set its alignment, size, etc. */
2429 if (unsignedp)
2431 TYPE_UNSIGNED (type) = 1;
2432 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UACCUM, 0));
2434 else
2435 SET_TYPE_MODE (type, mode_for_size (precision, MODE_ACCUM, 0));
2436 layout_type (type);
2438 return type;
2441 /* Initialize sizetypes so layout_type can use them. */
2443 void
2444 initialize_sizetypes (void)
2446 int precision, bprecision;
2448 /* Get sizetypes precision from the SIZE_TYPE target macro. */
2449 if (strcmp (SIZETYPE, "unsigned int") == 0)
2450 precision = INT_TYPE_SIZE;
2451 else if (strcmp (SIZETYPE, "long unsigned int") == 0)
2452 precision = LONG_TYPE_SIZE;
2453 else if (strcmp (SIZETYPE, "long long unsigned int") == 0)
2454 precision = LONG_LONG_TYPE_SIZE;
2455 else if (strcmp (SIZETYPE, "short unsigned int") == 0)
2456 precision = SHORT_TYPE_SIZE;
2457 else
2458 gcc_unreachable ();
2460 bprecision
2461 = MIN (precision + BITS_PER_UNIT_LOG + 1, MAX_FIXED_MODE_SIZE);
2462 bprecision
2463 = GET_MODE_PRECISION (smallest_mode_for_size (bprecision, MODE_INT));
2464 if (bprecision > HOST_BITS_PER_DOUBLE_INT)
2465 bprecision = HOST_BITS_PER_DOUBLE_INT;
2467 /* Create stubs for sizetype and bitsizetype so we can create constants. */
2468 sizetype = make_node (INTEGER_TYPE);
2469 TYPE_NAME (sizetype) = get_identifier ("sizetype");
2470 TYPE_PRECISION (sizetype) = precision;
2471 TYPE_UNSIGNED (sizetype) = 1;
2472 bitsizetype = make_node (INTEGER_TYPE);
2473 TYPE_NAME (bitsizetype) = get_identifier ("bitsizetype");
2474 TYPE_PRECISION (bitsizetype) = bprecision;
2475 TYPE_UNSIGNED (bitsizetype) = 1;
2477 /* Now layout both types manually. */
2478 SET_TYPE_MODE (sizetype, smallest_mode_for_size (precision, MODE_INT));
2479 TYPE_ALIGN (sizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (sizetype));
2480 TYPE_SIZE (sizetype) = bitsize_int (precision);
2481 TYPE_SIZE_UNIT (sizetype) = size_int (GET_MODE_SIZE (TYPE_MODE (sizetype)));
2482 set_min_and_max_values_for_integral_type (sizetype, precision,
2483 /*is_unsigned=*/true);
2485 SET_TYPE_MODE (bitsizetype, smallest_mode_for_size (bprecision, MODE_INT));
2486 TYPE_ALIGN (bitsizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (bitsizetype));
2487 TYPE_SIZE (bitsizetype) = bitsize_int (bprecision);
2488 TYPE_SIZE_UNIT (bitsizetype)
2489 = size_int (GET_MODE_SIZE (TYPE_MODE (bitsizetype)));
2490 set_min_and_max_values_for_integral_type (bitsizetype, bprecision,
2491 /*is_unsigned=*/true);
2493 /* Create the signed variants of *sizetype. */
2494 ssizetype = make_signed_type (TYPE_PRECISION (sizetype));
2495 TYPE_NAME (ssizetype) = get_identifier ("ssizetype");
2496 sbitsizetype = make_signed_type (TYPE_PRECISION (bitsizetype));
2497 TYPE_NAME (sbitsizetype) = get_identifier ("sbitsizetype");
2500 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2501 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2502 for TYPE, based on the PRECISION and whether or not the TYPE
2503 IS_UNSIGNED. PRECISION need not correspond to a width supported
2504 natively by the hardware; for example, on a machine with 8-bit,
2505 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2506 61. */
2508 void
2509 set_min_and_max_values_for_integral_type (tree type,
2510 int precision,
2511 bool is_unsigned)
2513 tree min_value;
2514 tree max_value;
2516 /* For bitfields with zero width we end up creating integer types
2517 with zero precision. Don't assign any minimum/maximum values
2518 to those types, they don't have any valid value. */
2519 if (precision < 1)
2520 return;
2522 if (is_unsigned)
2524 min_value = build_int_cst (type, 0);
2525 max_value
2526 = build_int_cst_wide (type, precision - HOST_BITS_PER_WIDE_INT >= 0
2527 ? -1
2528 : (HOST_WIDE_INT_1U << precision) - 1,
2529 precision - HOST_BITS_PER_WIDE_INT > 0
2530 ? ((unsigned HOST_WIDE_INT) ~0
2531 >> (HOST_BITS_PER_WIDE_INT
2532 - (precision - HOST_BITS_PER_WIDE_INT)))
2533 : 0);
2535 else
2537 min_value
2538 = build_int_cst_wide (type,
2539 (precision - HOST_BITS_PER_WIDE_INT > 0
2541 : HOST_WIDE_INT_M1U << (precision - 1)),
2542 (((HOST_WIDE_INT) (-1)
2543 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2544 ? precision - HOST_BITS_PER_WIDE_INT - 1
2545 : 0))));
2546 max_value
2547 = build_int_cst_wide (type,
2548 (precision - HOST_BITS_PER_WIDE_INT > 0
2549 ? -1
2550 : (HOST_WIDE_INT)
2551 (((unsigned HOST_WIDE_INT) 1
2552 << (precision - 1)) - 1)),
2553 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2554 ? (HOST_WIDE_INT)
2555 ((((unsigned HOST_WIDE_INT) 1
2556 << (precision - HOST_BITS_PER_WIDE_INT
2557 - 1))) - 1)
2558 : 0));
2561 TYPE_MIN_VALUE (type) = min_value;
2562 TYPE_MAX_VALUE (type) = max_value;
2565 /* Set the extreme values of TYPE based on its precision in bits,
2566 then lay it out. Used when make_signed_type won't do
2567 because the tree code is not INTEGER_TYPE.
2568 E.g. for Pascal, when the -fsigned-char option is given. */
2570 void
2571 fixup_signed_type (tree type)
2573 int precision = TYPE_PRECISION (type);
2575 /* We can not represent properly constants greater then
2576 HOST_BITS_PER_DOUBLE_INT, still we need the types
2577 as they are used by i386 vector extensions and friends. */
2578 if (precision > HOST_BITS_PER_DOUBLE_INT)
2579 precision = HOST_BITS_PER_DOUBLE_INT;
2581 set_min_and_max_values_for_integral_type (type, precision,
2582 /*is_unsigned=*/false);
2584 /* Lay out the type: set its alignment, size, etc. */
2585 layout_type (type);
2588 /* Set the extreme values of TYPE based on its precision in bits,
2589 then lay it out. This is used both in `make_unsigned_type'
2590 and for enumeral types. */
2592 void
2593 fixup_unsigned_type (tree type)
2595 int precision = TYPE_PRECISION (type);
2597 /* We can not represent properly constants greater then
2598 HOST_BITS_PER_DOUBLE_INT, still we need the types
2599 as they are used by i386 vector extensions and friends. */
2600 if (precision > HOST_BITS_PER_DOUBLE_INT)
2601 precision = HOST_BITS_PER_DOUBLE_INT;
2603 TYPE_UNSIGNED (type) = 1;
2605 set_min_and_max_values_for_integral_type (type, precision,
2606 /*is_unsigned=*/true);
2608 /* Lay out the type: set its alignment, size, etc. */
2609 layout_type (type);
2612 /* Construct an iterator for a bitfield that spans BITSIZE bits,
2613 starting at BITPOS.
2615 BITREGION_START is the bit position of the first bit in this
2616 sequence of bit fields. BITREGION_END is the last bit in this
2617 sequence. If these two fields are non-zero, we should restrict the
2618 memory access to that range. Otherwise, we are allowed to touch
2619 any adjacent non bit-fields.
2621 ALIGN is the alignment of the underlying object in bits.
2622 VOLATILEP says whether the bitfield is volatile. */
2624 bit_field_mode_iterator
2625 ::bit_field_mode_iterator (HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
2626 HOST_WIDE_INT bitregion_start,
2627 HOST_WIDE_INT bitregion_end,
2628 unsigned int align, bool volatilep)
2629 : m_mode (GET_CLASS_NARROWEST_MODE (MODE_INT)), m_bitsize (bitsize),
2630 m_bitpos (bitpos), m_bitregion_start (bitregion_start),
2631 m_bitregion_end (bitregion_end), m_align (align),
2632 m_volatilep (volatilep), m_count (0)
2634 if (!m_bitregion_end)
2636 /* We can assume that any aligned chunk of ALIGN bits that overlaps
2637 the bitfield is mapped and won't trap, provided that ALIGN isn't
2638 too large. The cap is the biggest required alignment for data,
2639 or at least the word size. And force one such chunk at least. */
2640 unsigned HOST_WIDE_INT units
2641 = MIN (align, MAX (BIGGEST_ALIGNMENT, BITS_PER_WORD));
2642 if (bitsize <= 0)
2643 bitsize = 1;
2644 m_bitregion_end = bitpos + bitsize + units - 1;
2645 m_bitregion_end -= m_bitregion_end % units + 1;
2649 /* Calls to this function return successively larger modes that can be used
2650 to represent the bitfield. Return true if another bitfield mode is
2651 available, storing it in *OUT_MODE if so. */
2653 bool
2654 bit_field_mode_iterator::next_mode (enum machine_mode *out_mode)
2656 for (; m_mode != VOIDmode; m_mode = GET_MODE_WIDER_MODE (m_mode))
2658 unsigned int unit = GET_MODE_BITSIZE (m_mode);
2660 /* Skip modes that don't have full precision. */
2661 if (unit != GET_MODE_PRECISION (m_mode))
2662 continue;
2664 /* Stop if the mode is too wide to handle efficiently. */
2665 if (unit > MAX_FIXED_MODE_SIZE)
2666 break;
2668 /* Don't deliver more than one multiword mode; the smallest one
2669 should be used. */
2670 if (m_count > 0 && unit > BITS_PER_WORD)
2671 break;
2673 /* Skip modes that are too small. */
2674 unsigned HOST_WIDE_INT substart = (unsigned HOST_WIDE_INT) m_bitpos % unit;
2675 unsigned HOST_WIDE_INT subend = substart + m_bitsize;
2676 if (subend > unit)
2677 continue;
2679 /* Stop if the mode goes outside the bitregion. */
2680 HOST_WIDE_INT start = m_bitpos - substart;
2681 if (m_bitregion_start && start < m_bitregion_start)
2682 break;
2683 HOST_WIDE_INT end = start + unit;
2684 if (end > m_bitregion_end + 1)
2685 break;
2687 /* Stop if the mode requires too much alignment. */
2688 if (GET_MODE_ALIGNMENT (m_mode) > m_align
2689 && SLOW_UNALIGNED_ACCESS (m_mode, m_align))
2690 break;
2692 *out_mode = m_mode;
2693 m_mode = GET_MODE_WIDER_MODE (m_mode);
2694 m_count++;
2695 return true;
2697 return false;
2700 /* Return true if smaller modes are generally preferred for this kind
2701 of bitfield. */
2703 bool
2704 bit_field_mode_iterator::prefer_smaller_modes ()
2706 return (m_volatilep
2707 ? targetm.narrow_volatile_bitfield ()
2708 : !SLOW_BYTE_ACCESS);
2711 /* Find the best machine mode to use when referencing a bit field of length
2712 BITSIZE bits starting at BITPOS.
2714 BITREGION_START is the bit position of the first bit in this
2715 sequence of bit fields. BITREGION_END is the last bit in this
2716 sequence. If these two fields are non-zero, we should restrict the
2717 memory access to that range. Otherwise, we are allowed to touch
2718 any adjacent non bit-fields.
2720 The underlying object is known to be aligned to a boundary of ALIGN bits.
2721 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2722 larger than LARGEST_MODE (usually SImode).
2724 If no mode meets all these conditions, we return VOIDmode.
2726 If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the
2727 smallest mode meeting these conditions.
2729 If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the
2730 largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2731 all the conditions.
2733 If VOLATILEP is true the narrow_volatile_bitfields target hook is used to
2734 decide which of the above modes should be used. */
2736 enum machine_mode
2737 get_best_mode (int bitsize, int bitpos,
2738 unsigned HOST_WIDE_INT bitregion_start,
2739 unsigned HOST_WIDE_INT bitregion_end,
2740 unsigned int align,
2741 enum machine_mode largest_mode, bool volatilep)
2743 bit_field_mode_iterator iter (bitsize, bitpos, bitregion_start,
2744 bitregion_end, align, volatilep);
2745 enum machine_mode widest_mode = VOIDmode;
2746 enum machine_mode mode;
2747 while (iter.next_mode (&mode)
2748 /* ??? For historical reasons, reject modes that would normally
2749 receive greater alignment, even if unaligned accesses are
2750 acceptable. This has both advantages and disadvantages.
2751 Removing this check means that something like:
2753 struct s { unsigned int x; unsigned int y; };
2754 int f (struct s *s) { return s->x == 0 && s->y == 0; }
2756 can be implemented using a single load and compare on
2757 64-bit machines that have no alignment restrictions.
2758 For example, on powerpc64-linux-gnu, we would generate:
2760 ld 3,0(3)
2761 cntlzd 3,3
2762 srdi 3,3,6
2765 rather than:
2767 lwz 9,0(3)
2768 cmpwi 7,9,0
2769 bne 7,.L3
2770 lwz 3,4(3)
2771 cntlzw 3,3
2772 srwi 3,3,5
2773 extsw 3,3
2775 .p2align 4,,15
2776 .L3:
2777 li 3,0
2780 However, accessing more than one field can make life harder
2781 for the gimple optimizers. For example, gcc.dg/vect/bb-slp-5.c
2782 has a series of unsigned short copies followed by a series of
2783 unsigned short comparisons. With this check, both the copies
2784 and comparisons remain 16-bit accesses and FRE is able
2785 to eliminate the latter. Without the check, the comparisons
2786 can be done using 2 64-bit operations, which FRE isn't able
2787 to handle in the same way.
2789 Either way, it would probably be worth disabling this check
2790 during expand. One particular example where removing the
2791 check would help is the get_best_mode call in store_bit_field.
2792 If we are given a memory bitregion of 128 bits that is aligned
2793 to a 64-bit boundary, and the bitfield we want to modify is
2794 in the second half of the bitregion, this check causes
2795 store_bitfield to turn the memory into a 64-bit reference
2796 to the _first_ half of the region. We later use
2797 adjust_bitfield_address to get a reference to the correct half,
2798 but doing so looks to adjust_bitfield_address as though we are
2799 moving past the end of the original object, so it drops the
2800 associated MEM_EXPR and MEM_OFFSET. Removing the check
2801 causes store_bit_field to keep a 128-bit memory reference,
2802 so that the final bitfield reference still has a MEM_EXPR
2803 and MEM_OFFSET. */
2804 && GET_MODE_ALIGNMENT (mode) <= align
2805 && (largest_mode == VOIDmode
2806 || GET_MODE_SIZE (mode) <= GET_MODE_SIZE (largest_mode)))
2808 widest_mode = mode;
2809 if (iter.prefer_smaller_modes ())
2810 break;
2812 return widest_mode;
2815 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2816 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2818 void
2819 get_mode_bounds (enum machine_mode mode, int sign,
2820 enum machine_mode target_mode,
2821 rtx *mmin, rtx *mmax)
2823 unsigned size = GET_MODE_PRECISION (mode);
2824 unsigned HOST_WIDE_INT min_val, max_val;
2826 gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
2828 /* Special case BImode, which has values 0 and STORE_FLAG_VALUE. */
2829 if (mode == BImode)
2831 if (STORE_FLAG_VALUE < 0)
2833 min_val = STORE_FLAG_VALUE;
2834 max_val = 0;
2836 else
2838 min_val = 0;
2839 max_val = STORE_FLAG_VALUE;
2842 else if (sign)
2844 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2845 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
2847 else
2849 min_val = 0;
2850 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
2853 *mmin = gen_int_mode (min_val, target_mode);
2854 *mmax = gen_int_mode (max_val, target_mode);
2857 #include "gt-stor-layout.h"