* config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Disable accumulation
[official-gcc.git] / gcc / stor-layout.c
blob20e577d848269e16194ce00ff9760a842242f5fa
1 /* C-compiler utilities for types and variables storage layout
2 Copyright (C) 1987-2013 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 "rtl.h"
27 #include "tm_p.h"
28 #include "flags.h"
29 #include "function.h"
30 #include "expr.h"
31 #include "diagnostic-core.h"
32 #include "ggc.h"
33 #include "target.h"
34 #include "langhooks.h"
35 #include "regs.h"
36 #include "params.h"
37 #include "cgraph.h"
38 #include "tree-inline.h"
39 #include "tree-dump.h"
40 #include "gimple.h"
42 /* Data type for the expressions representing sizes of data types.
43 It is the first integer type laid out. */
44 tree sizetype_tab[(int) stk_type_kind_last];
46 /* If nonzero, this is an upper limit on alignment of structure fields.
47 The value is measured in bits. */
48 unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
50 /* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
51 in the address spaces' address_mode, not pointer_mode. Set only by
52 internal_reference_types called only by a front end. */
53 static int reference_types_internal = 0;
55 static tree self_referential_size (tree);
56 static void finalize_record_size (record_layout_info);
57 static void finalize_type_size (tree);
58 static void place_union_field (record_layout_info, tree);
59 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
60 static int excess_unit_span (HOST_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT,
61 HOST_WIDE_INT, tree);
62 #endif
63 extern void debug_rli (record_layout_info);
65 /* Show that REFERENCE_TYPES are internal and should use address_mode.
66 Called only by front end. */
68 void
69 internal_reference_types (void)
71 reference_types_internal = 1;
74 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
75 to serve as the actual size-expression for a type or decl. */
77 tree
78 variable_size (tree size)
80 /* Obviously. */
81 if (TREE_CONSTANT (size))
82 return size;
84 /* If the size is self-referential, we can't make a SAVE_EXPR (see
85 save_expr for the rationale). But we can do something else. */
86 if (CONTAINS_PLACEHOLDER_P (size))
87 return self_referential_size (size);
89 /* If we are in the global binding level, we can't make a SAVE_EXPR
90 since it may end up being shared across functions, so it is up
91 to the front-end to deal with this case. */
92 if (lang_hooks.decls.global_bindings_p ())
93 return size;
95 return save_expr (size);
98 /* An array of functions used for self-referential size computation. */
99 static GTY(()) vec<tree, va_gc> *size_functions;
101 /* Similar to copy_tree_r but do not copy component references involving
102 PLACEHOLDER_EXPRs. These nodes are spotted in find_placeholder_in_expr
103 and substituted in substitute_in_expr. */
105 static tree
106 copy_self_referential_tree_r (tree *tp, int *walk_subtrees, void *data)
108 enum tree_code code = TREE_CODE (*tp);
110 /* Stop at types, decls, constants like copy_tree_r. */
111 if (TREE_CODE_CLASS (code) == tcc_type
112 || TREE_CODE_CLASS (code) == tcc_declaration
113 || TREE_CODE_CLASS (code) == tcc_constant)
115 *walk_subtrees = 0;
116 return NULL_TREE;
119 /* This is the pattern built in ada/make_aligning_type. */
120 else if (code == ADDR_EXPR
121 && TREE_CODE (TREE_OPERAND (*tp, 0)) == PLACEHOLDER_EXPR)
123 *walk_subtrees = 0;
124 return NULL_TREE;
127 /* Default case: the component reference. */
128 else if (code == COMPONENT_REF)
130 tree inner;
131 for (inner = TREE_OPERAND (*tp, 0);
132 REFERENCE_CLASS_P (inner);
133 inner = TREE_OPERAND (inner, 0))
136 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
138 *walk_subtrees = 0;
139 return NULL_TREE;
143 /* We're not supposed to have them in self-referential size trees
144 because we wouldn't properly control when they are evaluated.
145 However, not creating superfluous SAVE_EXPRs requires accurate
146 tracking of readonly-ness all the way down to here, which we
147 cannot always guarantee in practice. So punt in this case. */
148 else if (code == SAVE_EXPR)
149 return error_mark_node;
151 else if (code == STATEMENT_LIST)
152 gcc_unreachable ();
154 return copy_tree_r (tp, walk_subtrees, data);
157 /* Given a SIZE expression that is self-referential, return an equivalent
158 expression to serve as the actual size expression for a type. */
160 static tree
161 self_referential_size (tree size)
163 static unsigned HOST_WIDE_INT fnno = 0;
164 vec<tree> self_refs = vNULL;
165 tree param_type_list = NULL, param_decl_list = NULL;
166 tree t, ref, return_type, fntype, fnname, fndecl;
167 unsigned int i;
168 char buf[128];
169 vec<tree, va_gc> *args = NULL;
171 /* Do not factor out simple operations. */
172 t = skip_simple_constant_arithmetic (size);
173 if (TREE_CODE (t) == CALL_EXPR)
174 return size;
176 /* Collect the list of self-references in the expression. */
177 find_placeholder_in_expr (size, &self_refs);
178 gcc_assert (self_refs.length () > 0);
180 /* Obtain a private copy of the expression. */
181 t = size;
182 if (walk_tree (&t, copy_self_referential_tree_r, NULL, NULL) != NULL_TREE)
183 return size;
184 size = t;
186 /* Build the parameter and argument lists in parallel; also
187 substitute the former for the latter in the expression. */
188 vec_alloc (args, self_refs.length ());
189 FOR_EACH_VEC_ELT (self_refs, i, ref)
191 tree subst, param_name, param_type, param_decl;
193 if (DECL_P (ref))
195 /* We shouldn't have true variables here. */
196 gcc_assert (TREE_READONLY (ref));
197 subst = ref;
199 /* This is the pattern built in ada/make_aligning_type. */
200 else if (TREE_CODE (ref) == ADDR_EXPR)
201 subst = ref;
202 /* Default case: the component reference. */
203 else
204 subst = TREE_OPERAND (ref, 1);
206 sprintf (buf, "p%d", i);
207 param_name = get_identifier (buf);
208 param_type = TREE_TYPE (ref);
209 param_decl
210 = build_decl (input_location, PARM_DECL, param_name, param_type);
211 if (targetm.calls.promote_prototypes (NULL_TREE)
212 && INTEGRAL_TYPE_P (param_type)
213 && TYPE_PRECISION (param_type) < TYPE_PRECISION (integer_type_node))
214 DECL_ARG_TYPE (param_decl) = integer_type_node;
215 else
216 DECL_ARG_TYPE (param_decl) = param_type;
217 DECL_ARTIFICIAL (param_decl) = 1;
218 TREE_READONLY (param_decl) = 1;
220 size = substitute_in_expr (size, subst, param_decl);
222 param_type_list = tree_cons (NULL_TREE, param_type, param_type_list);
223 param_decl_list = chainon (param_decl, param_decl_list);
224 args->quick_push (ref);
227 self_refs.release ();
229 /* Append 'void' to indicate that the number of parameters is fixed. */
230 param_type_list = tree_cons (NULL_TREE, void_type_node, param_type_list);
232 /* The 3 lists have been created in reverse order. */
233 param_type_list = nreverse (param_type_list);
234 param_decl_list = nreverse (param_decl_list);
236 /* Build the function type. */
237 return_type = TREE_TYPE (size);
238 fntype = build_function_type (return_type, param_type_list);
240 /* Build the function declaration. */
241 sprintf (buf, "SZ"HOST_WIDE_INT_PRINT_UNSIGNED, fnno++);
242 fnname = get_file_function_name (buf);
243 fndecl = build_decl (input_location, FUNCTION_DECL, fnname, fntype);
244 for (t = param_decl_list; t; t = DECL_CHAIN (t))
245 DECL_CONTEXT (t) = fndecl;
246 DECL_ARGUMENTS (fndecl) = param_decl_list;
247 DECL_RESULT (fndecl)
248 = build_decl (input_location, RESULT_DECL, 0, return_type);
249 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
251 /* The function has been created by the compiler and we don't
252 want to emit debug info for it. */
253 DECL_ARTIFICIAL (fndecl) = 1;
254 DECL_IGNORED_P (fndecl) = 1;
256 /* It is supposed to be "const" and never throw. */
257 TREE_READONLY (fndecl) = 1;
258 TREE_NOTHROW (fndecl) = 1;
260 /* We want it to be inlined when this is deemed profitable, as
261 well as discarded if every call has been integrated. */
262 DECL_DECLARED_INLINE_P (fndecl) = 1;
264 /* It is made up of a unique return statement. */
265 DECL_INITIAL (fndecl) = make_node (BLOCK);
266 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
267 t = build2 (MODIFY_EXPR, return_type, DECL_RESULT (fndecl), size);
268 DECL_SAVED_TREE (fndecl) = build1 (RETURN_EXPR, void_type_node, t);
269 TREE_STATIC (fndecl) = 1;
271 /* Put it onto the list of size functions. */
272 vec_safe_push (size_functions, fndecl);
274 /* Replace the original expression with a call to the size function. */
275 return build_call_expr_loc_vec (UNKNOWN_LOCATION, fndecl, args);
278 /* Take, queue and compile all the size functions. It is essential that
279 the size functions be gimplified at the very end of the compilation
280 in order to guarantee transparent handling of self-referential sizes.
281 Otherwise the GENERIC inliner would not be able to inline them back
282 at each of their call sites, thus creating artificial non-constant
283 size expressions which would trigger nasty problems later on. */
285 void
286 finalize_size_functions (void)
288 unsigned int i;
289 tree fndecl;
291 for (i = 0; size_functions && size_functions->iterate (i, &fndecl); i++)
293 allocate_struct_function (fndecl, false);
294 set_cfun (NULL);
295 dump_function (TDI_original, fndecl);
296 gimplify_function_tree (fndecl);
297 dump_function (TDI_generic, fndecl);
298 cgraph_finalize_function (fndecl, false);
301 vec_free (size_functions);
304 /* Return the machine mode to use for a nonscalar of SIZE bits. The
305 mode must be in class MCLASS, and have exactly that many value bits;
306 it may have padding as well. If LIMIT is nonzero, modes of wider
307 than MAX_FIXED_MODE_SIZE will not be used. */
309 enum machine_mode
310 mode_for_size (unsigned int size, enum mode_class mclass, int limit)
312 enum machine_mode mode;
314 if (limit && size > MAX_FIXED_MODE_SIZE)
315 return BLKmode;
317 /* Get the first mode which has this size, in the specified class. */
318 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
319 mode = GET_MODE_WIDER_MODE (mode))
320 if (GET_MODE_PRECISION (mode) == size)
321 return mode;
323 return BLKmode;
326 /* Similar, except passed a tree node. */
328 enum machine_mode
329 mode_for_size_tree (const_tree size, enum mode_class mclass, int limit)
331 unsigned HOST_WIDE_INT uhwi;
332 unsigned int ui;
334 if (!host_integerp (size, 1))
335 return BLKmode;
336 uhwi = tree_low_cst (size, 1);
337 ui = uhwi;
338 if (uhwi != ui)
339 return BLKmode;
340 return mode_for_size (ui, mclass, limit);
343 /* Similar, but never return BLKmode; return the narrowest mode that
344 contains at least the requested number of value bits. */
346 enum machine_mode
347 smallest_mode_for_size (unsigned int size, enum mode_class mclass)
349 enum machine_mode mode;
351 /* Get the first mode which has at least this size, in the
352 specified class. */
353 for (mode = GET_CLASS_NARROWEST_MODE (mclass); mode != VOIDmode;
354 mode = GET_MODE_WIDER_MODE (mode))
355 if (GET_MODE_PRECISION (mode) >= size)
356 return mode;
358 gcc_unreachable ();
361 /* Find an integer mode of the exact same size, or BLKmode on failure. */
363 enum machine_mode
364 int_mode_for_mode (enum machine_mode mode)
366 switch (GET_MODE_CLASS (mode))
368 case MODE_INT:
369 case MODE_PARTIAL_INT:
370 break;
372 case MODE_COMPLEX_INT:
373 case MODE_COMPLEX_FLOAT:
374 case MODE_FLOAT:
375 case MODE_DECIMAL_FLOAT:
376 case MODE_VECTOR_INT:
377 case MODE_VECTOR_FLOAT:
378 case MODE_FRACT:
379 case MODE_ACCUM:
380 case MODE_UFRACT:
381 case MODE_UACCUM:
382 case MODE_VECTOR_FRACT:
383 case MODE_VECTOR_ACCUM:
384 case MODE_VECTOR_UFRACT:
385 case MODE_VECTOR_UACCUM:
386 mode = mode_for_size (GET_MODE_BITSIZE (mode), MODE_INT, 0);
387 break;
389 case MODE_RANDOM:
390 if (mode == BLKmode)
391 break;
393 /* ... fall through ... */
395 case MODE_CC:
396 default:
397 gcc_unreachable ();
400 return mode;
403 /* Find a mode that is suitable for representing a vector with
404 NUNITS elements of mode INNERMODE. Returns BLKmode if there
405 is no suitable mode. */
407 enum machine_mode
408 mode_for_vector (enum machine_mode innermode, unsigned nunits)
410 enum machine_mode mode;
412 /* First, look for a supported vector type. */
413 if (SCALAR_FLOAT_MODE_P (innermode))
414 mode = MIN_MODE_VECTOR_FLOAT;
415 else if (SCALAR_FRACT_MODE_P (innermode))
416 mode = MIN_MODE_VECTOR_FRACT;
417 else if (SCALAR_UFRACT_MODE_P (innermode))
418 mode = MIN_MODE_VECTOR_UFRACT;
419 else if (SCALAR_ACCUM_MODE_P (innermode))
420 mode = MIN_MODE_VECTOR_ACCUM;
421 else if (SCALAR_UACCUM_MODE_P (innermode))
422 mode = MIN_MODE_VECTOR_UACCUM;
423 else
424 mode = MIN_MODE_VECTOR_INT;
426 /* Do not check vector_mode_supported_p here. We'll do that
427 later in vector_type_mode. */
428 for (; mode != VOIDmode ; mode = GET_MODE_WIDER_MODE (mode))
429 if (GET_MODE_NUNITS (mode) == nunits
430 && GET_MODE_INNER (mode) == innermode)
431 break;
433 /* For integers, try mapping it to a same-sized scalar mode. */
434 if (mode == VOIDmode
435 && GET_MODE_CLASS (innermode) == MODE_INT)
436 mode = mode_for_size (nunits * GET_MODE_BITSIZE (innermode),
437 MODE_INT, 0);
439 if (mode == VOIDmode
440 || (GET_MODE_CLASS (mode) == MODE_INT
441 && !have_regs_of_mode[mode]))
442 return BLKmode;
444 return mode;
447 /* Return the alignment of MODE. This will be bounded by 1 and
448 BIGGEST_ALIGNMENT. */
450 unsigned int
451 get_mode_alignment (enum machine_mode mode)
453 return MIN (BIGGEST_ALIGNMENT, MAX (1, mode_base_align[mode]*BITS_PER_UNIT));
456 /* Return the precision of the mode, or for a complex or vector mode the
457 precision of the mode of its elements. */
459 unsigned int
460 element_precision (enum machine_mode mode)
462 if (COMPLEX_MODE_P (mode) || VECTOR_MODE_P (mode))
463 mode = GET_MODE_INNER (mode);
465 return GET_MODE_PRECISION (mode);
468 /* Return the natural mode of an array, given that it is SIZE bytes in
469 total and has elements of type ELEM_TYPE. */
471 static enum machine_mode
472 mode_for_array (tree elem_type, tree size)
474 tree elem_size;
475 unsigned HOST_WIDE_INT int_size, int_elem_size;
476 bool limit_p;
478 /* One-element arrays get the component type's mode. */
479 elem_size = TYPE_SIZE (elem_type);
480 if (simple_cst_equal (size, elem_size))
481 return TYPE_MODE (elem_type);
483 limit_p = true;
484 if (host_integerp (size, 1) && host_integerp (elem_size, 1))
486 int_size = tree_low_cst (size, 1);
487 int_elem_size = tree_low_cst (elem_size, 1);
488 if (int_elem_size > 0
489 && int_size % int_elem_size == 0
490 && targetm.array_mode_supported_p (TYPE_MODE (elem_type),
491 int_size / int_elem_size))
492 limit_p = false;
494 return mode_for_size_tree (size, MODE_INT, limit_p);
497 /* Subroutine of layout_decl: Force alignment required for the data type.
498 But if the decl itself wants greater alignment, don't override that. */
500 static inline void
501 do_type_align (tree type, tree decl)
503 if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
505 DECL_ALIGN (decl) = TYPE_ALIGN (type);
506 if (TREE_CODE (decl) == FIELD_DECL)
507 DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
511 /* Set the size, mode and alignment of a ..._DECL node.
512 TYPE_DECL does need this for C++.
513 Note that LABEL_DECL and CONST_DECL nodes do not need this,
514 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
515 Don't call layout_decl for them.
517 KNOWN_ALIGN is the amount of alignment we can assume this
518 decl has with no special effort. It is relevant only for FIELD_DECLs
519 and depends on the previous fields.
520 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
521 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
522 the record will be aligned to suit. */
524 void
525 layout_decl (tree decl, unsigned int known_align)
527 tree type = TREE_TYPE (decl);
528 enum tree_code code = TREE_CODE (decl);
529 rtx rtl = NULL_RTX;
530 location_t loc = DECL_SOURCE_LOCATION (decl);
532 if (code == CONST_DECL)
533 return;
535 gcc_assert (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL
536 || code == TYPE_DECL ||code == FIELD_DECL);
538 rtl = DECL_RTL_IF_SET (decl);
540 if (type == error_mark_node)
541 type = void_type_node;
543 /* Usually the size and mode come from the data type without change,
544 however, the front-end may set the explicit width of the field, so its
545 size may not be the same as the size of its type. This happens with
546 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
547 also happens with other fields. For example, the C++ front-end creates
548 zero-sized fields corresponding to empty base classes, and depends on
549 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
550 size in bytes from the size in bits. If we have already set the mode,
551 don't set it again since we can be called twice for FIELD_DECLs. */
553 DECL_UNSIGNED (decl) = TYPE_UNSIGNED (type);
554 if (DECL_MODE (decl) == VOIDmode)
555 DECL_MODE (decl) = TYPE_MODE (type);
557 if (DECL_SIZE (decl) == 0)
559 DECL_SIZE (decl) = TYPE_SIZE (type);
560 DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (type);
562 else if (DECL_SIZE_UNIT (decl) == 0)
563 DECL_SIZE_UNIT (decl)
564 = fold_convert_loc (loc, sizetype,
565 size_binop_loc (loc, CEIL_DIV_EXPR, DECL_SIZE (decl),
566 bitsize_unit_node));
568 if (code != FIELD_DECL)
569 /* For non-fields, update the alignment from the type. */
570 do_type_align (type, decl);
571 else
572 /* For fields, it's a bit more complicated... */
574 bool old_user_align = DECL_USER_ALIGN (decl);
575 bool zero_bitfield = false;
576 bool packed_p = DECL_PACKED (decl);
577 unsigned int mfa;
579 if (DECL_BIT_FIELD (decl))
581 DECL_BIT_FIELD_TYPE (decl) = type;
583 /* A zero-length bit-field affects the alignment of the next
584 field. In essence such bit-fields are not influenced by
585 any packing due to #pragma pack or attribute packed. */
586 if (integer_zerop (DECL_SIZE (decl))
587 && ! targetm.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl)))
589 zero_bitfield = true;
590 packed_p = false;
591 #ifdef PCC_BITFIELD_TYPE_MATTERS
592 if (PCC_BITFIELD_TYPE_MATTERS)
593 do_type_align (type, decl);
594 else
595 #endif
597 #ifdef EMPTY_FIELD_BOUNDARY
598 if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
600 DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
601 DECL_USER_ALIGN (decl) = 0;
603 #endif
607 /* See if we can use an ordinary integer mode for a bit-field.
608 Conditions are: a fixed size that is correct for another mode,
609 occupying a complete byte or bytes on proper boundary,
610 and not -fstrict-volatile-bitfields. If the latter is set,
611 we unfortunately can't check TREE_THIS_VOLATILE, as a cast
612 may make a volatile object later. */
613 if (TYPE_SIZE (type) != 0
614 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
615 && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT
616 && flag_strict_volatile_bitfields <= 0)
618 enum machine_mode xmode
619 = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
620 unsigned int xalign = GET_MODE_ALIGNMENT (xmode);
622 if (xmode != BLKmode
623 && !(xalign > BITS_PER_UNIT && DECL_PACKED (decl))
624 && (known_align == 0 || known_align >= xalign))
626 DECL_ALIGN (decl) = MAX (xalign, DECL_ALIGN (decl));
627 DECL_MODE (decl) = xmode;
628 DECL_BIT_FIELD (decl) = 0;
632 /* Turn off DECL_BIT_FIELD if we won't need it set. */
633 if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
634 && known_align >= TYPE_ALIGN (type)
635 && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
636 DECL_BIT_FIELD (decl) = 0;
638 else if (packed_p && DECL_USER_ALIGN (decl))
639 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
640 round up; we'll reduce it again below. We want packing to
641 supersede USER_ALIGN inherited from the type, but defer to
642 alignment explicitly specified on the field decl. */;
643 else
644 do_type_align (type, decl);
646 /* If the field is packed and not explicitly aligned, give it the
647 minimum alignment. Note that do_type_align may set
648 DECL_USER_ALIGN, so we need to check old_user_align instead. */
649 if (packed_p
650 && !old_user_align)
651 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
653 if (! packed_p && ! DECL_USER_ALIGN (decl))
655 /* Some targets (i.e. i386, VMS) limit struct field alignment
656 to a lower boundary than alignment of variables unless
657 it was overridden by attribute aligned. */
658 #ifdef BIGGEST_FIELD_ALIGNMENT
659 DECL_ALIGN (decl)
660 = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
661 #endif
662 #ifdef ADJUST_FIELD_ALIGN
663 DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
664 #endif
667 if (zero_bitfield)
668 mfa = initial_max_fld_align * BITS_PER_UNIT;
669 else
670 mfa = maximum_field_alignment;
671 /* Should this be controlled by DECL_USER_ALIGN, too? */
672 if (mfa != 0)
673 DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), mfa);
676 /* Evaluate nonconstant size only once, either now or as soon as safe. */
677 if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
678 DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
679 if (DECL_SIZE_UNIT (decl) != 0
680 && TREE_CODE (DECL_SIZE_UNIT (decl)) != INTEGER_CST)
681 DECL_SIZE_UNIT (decl) = variable_size (DECL_SIZE_UNIT (decl));
683 /* If requested, warn about definitions of large data objects. */
684 if (warn_larger_than
685 && (code == VAR_DECL || code == PARM_DECL)
686 && ! DECL_EXTERNAL (decl))
688 tree size = DECL_SIZE_UNIT (decl);
690 if (size != 0 && TREE_CODE (size) == INTEGER_CST
691 && compare_tree_int (size, larger_than_size) > 0)
693 int size_as_int = TREE_INT_CST_LOW (size);
695 if (compare_tree_int (size, size_as_int) == 0)
696 warning (OPT_Wlarger_than_, "size of %q+D is %d bytes", decl, size_as_int);
697 else
698 warning (OPT_Wlarger_than_, "size of %q+D is larger than %wd bytes",
699 decl, larger_than_size);
703 /* If the RTL was already set, update its mode and mem attributes. */
704 if (rtl)
706 PUT_MODE (rtl, DECL_MODE (decl));
707 SET_DECL_RTL (decl, 0);
708 set_mem_attributes (rtl, decl, 1);
709 SET_DECL_RTL (decl, rtl);
713 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
714 a previous call to layout_decl and calls it again. */
716 void
717 relayout_decl (tree decl)
719 DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0;
720 DECL_MODE (decl) = VOIDmode;
721 if (!DECL_USER_ALIGN (decl))
722 DECL_ALIGN (decl) = 0;
723 SET_DECL_RTL (decl, 0);
725 layout_decl (decl, 0);
728 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
729 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
730 is to be passed to all other layout functions for this record. It is the
731 responsibility of the caller to call `free' for the storage returned.
732 Note that garbage collection is not permitted until we finish laying
733 out the record. */
735 record_layout_info
736 start_record_layout (tree t)
738 record_layout_info rli = XNEW (struct record_layout_info_s);
740 rli->t = t;
742 /* If the type has a minimum specified alignment (via an attribute
743 declaration, for example) use it -- otherwise, start with a
744 one-byte alignment. */
745 rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
746 rli->unpacked_align = rli->record_align;
747 rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
749 #ifdef STRUCTURE_SIZE_BOUNDARY
750 /* Packed structures don't need to have minimum size. */
751 if (! TYPE_PACKED (t))
753 unsigned tmp;
755 /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
756 tmp = (unsigned) STRUCTURE_SIZE_BOUNDARY;
757 if (maximum_field_alignment != 0)
758 tmp = MIN (tmp, maximum_field_alignment);
759 rli->record_align = MAX (rli->record_align, tmp);
761 #endif
763 rli->offset = size_zero_node;
764 rli->bitpos = bitsize_zero_node;
765 rli->prev_field = 0;
766 rli->pending_statics = 0;
767 rli->packed_maybe_necessary = 0;
768 rli->remaining_in_alignment = 0;
770 return rli;
773 /* Return the combined bit position for the byte offset OFFSET and the
774 bit position BITPOS.
776 These functions operate on byte and bit positions present in FIELD_DECLs
777 and assume that these expressions result in no (intermediate) overflow.
778 This assumption is necessary to fold the expressions as much as possible,
779 so as to avoid creating artificially variable-sized types in languages
780 supporting variable-sized types like Ada. */
782 tree
783 bit_from_pos (tree offset, tree bitpos)
785 if (TREE_CODE (offset) == PLUS_EXPR)
786 offset = size_binop (PLUS_EXPR,
787 fold_convert (bitsizetype, TREE_OPERAND (offset, 0)),
788 fold_convert (bitsizetype, TREE_OPERAND (offset, 1)));
789 else
790 offset = fold_convert (bitsizetype, offset);
791 return size_binop (PLUS_EXPR, bitpos,
792 size_binop (MULT_EXPR, offset, bitsize_unit_node));
795 /* Return the combined truncated byte position for the byte offset OFFSET and
796 the bit position BITPOS. */
798 tree
799 byte_from_pos (tree offset, tree bitpos)
801 tree bytepos;
802 if (TREE_CODE (bitpos) == MULT_EXPR
803 && tree_int_cst_equal (TREE_OPERAND (bitpos, 1), bitsize_unit_node))
804 bytepos = TREE_OPERAND (bitpos, 0);
805 else
806 bytepos = size_binop (TRUNC_DIV_EXPR, bitpos, bitsize_unit_node);
807 return size_binop (PLUS_EXPR, offset, fold_convert (sizetype, bytepos));
810 /* Split the bit position POS into a byte offset *POFFSET and a bit
811 position *PBITPOS with the byte offset aligned to OFF_ALIGN bits. */
813 void
814 pos_from_bit (tree *poffset, tree *pbitpos, unsigned int off_align,
815 tree pos)
817 tree toff_align = bitsize_int (off_align);
818 if (TREE_CODE (pos) == MULT_EXPR
819 && tree_int_cst_equal (TREE_OPERAND (pos, 1), toff_align))
821 *poffset = size_binop (MULT_EXPR,
822 fold_convert (sizetype, TREE_OPERAND (pos, 0)),
823 size_int (off_align / BITS_PER_UNIT));
824 *pbitpos = bitsize_zero_node;
826 else
828 *poffset = size_binop (MULT_EXPR,
829 fold_convert (sizetype,
830 size_binop (FLOOR_DIV_EXPR, pos,
831 toff_align)),
832 size_int (off_align / BITS_PER_UNIT));
833 *pbitpos = size_binop (FLOOR_MOD_EXPR, pos, toff_align);
837 /* Given a pointer to bit and byte offsets and an offset alignment,
838 normalize the offsets so they are within the alignment. */
840 void
841 normalize_offset (tree *poffset, tree *pbitpos, unsigned int off_align)
843 /* If the bit position is now larger than it should be, adjust it
844 downwards. */
845 if (compare_tree_int (*pbitpos, off_align) >= 0)
847 tree offset, bitpos;
848 pos_from_bit (&offset, &bitpos, off_align, *pbitpos);
849 *poffset = size_binop (PLUS_EXPR, *poffset, offset);
850 *pbitpos = bitpos;
854 /* Print debugging information about the information in RLI. */
856 DEBUG_FUNCTION void
857 debug_rli (record_layout_info rli)
859 print_node_brief (stderr, "type", rli->t, 0);
860 print_node_brief (stderr, "\noffset", rli->offset, 0);
861 print_node_brief (stderr, " bitpos", rli->bitpos, 0);
863 fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
864 rli->record_align, rli->unpacked_align,
865 rli->offset_align);
867 /* The ms_struct code is the only that uses this. */
868 if (targetm.ms_bitfield_layout_p (rli->t))
869 fprintf (stderr, "remaining in alignment = %u\n", rli->remaining_in_alignment);
871 if (rli->packed_maybe_necessary)
872 fprintf (stderr, "packed may be necessary\n");
874 if (!vec_safe_is_empty (rli->pending_statics))
876 fprintf (stderr, "pending statics:\n");
877 debug_vec_tree (rli->pending_statics);
881 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
882 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
884 void
885 normalize_rli (record_layout_info rli)
887 normalize_offset (&rli->offset, &rli->bitpos, rli->offset_align);
890 /* Returns the size in bytes allocated so far. */
892 tree
893 rli_size_unit_so_far (record_layout_info rli)
895 return byte_from_pos (rli->offset, rli->bitpos);
898 /* Returns the size in bits allocated so far. */
900 tree
901 rli_size_so_far (record_layout_info rli)
903 return bit_from_pos (rli->offset, rli->bitpos);
906 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
907 the next available location within the record is given by KNOWN_ALIGN.
908 Update the variable alignment fields in RLI, and return the alignment
909 to give the FIELD. */
911 unsigned int
912 update_alignment_for_field (record_layout_info rli, tree field,
913 unsigned int known_align)
915 /* The alignment required for FIELD. */
916 unsigned int desired_align;
917 /* The type of this field. */
918 tree type = TREE_TYPE (field);
919 /* True if the field was explicitly aligned by the user. */
920 bool user_align;
921 bool is_bitfield;
923 /* Do not attempt to align an ERROR_MARK node */
924 if (TREE_CODE (type) == ERROR_MARK)
925 return 0;
927 /* Lay out the field so we know what alignment it needs. */
928 layout_decl (field, known_align);
929 desired_align = DECL_ALIGN (field);
930 user_align = DECL_USER_ALIGN (field);
932 is_bitfield = (type != error_mark_node
933 && DECL_BIT_FIELD_TYPE (field)
934 && ! integer_zerop (TYPE_SIZE (type)));
936 /* Record must have at least as much alignment as any field.
937 Otherwise, the alignment of the field within the record is
938 meaningless. */
939 if (targetm.ms_bitfield_layout_p (rli->t))
941 /* Here, the alignment of the underlying type of a bitfield can
942 affect the alignment of a record; even a zero-sized field
943 can do this. The alignment should be to the alignment of
944 the type, except that for zero-size bitfields this only
945 applies if there was an immediately prior, nonzero-size
946 bitfield. (That's the way it is, experimentally.) */
947 if ((!is_bitfield && !DECL_PACKED (field))
948 || ((DECL_SIZE (field) == NULL_TREE
949 || !integer_zerop (DECL_SIZE (field)))
950 ? !DECL_PACKED (field)
951 : (rli->prev_field
952 && DECL_BIT_FIELD_TYPE (rli->prev_field)
953 && ! integer_zerop (DECL_SIZE (rli->prev_field)))))
955 unsigned int type_align = TYPE_ALIGN (type);
956 type_align = MAX (type_align, desired_align);
957 if (maximum_field_alignment != 0)
958 type_align = MIN (type_align, maximum_field_alignment);
959 rli->record_align = MAX (rli->record_align, type_align);
960 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
963 #ifdef PCC_BITFIELD_TYPE_MATTERS
964 else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
966 /* Named bit-fields cause the entire structure to have the
967 alignment implied by their type. Some targets also apply the same
968 rules to unnamed bitfields. */
969 if (DECL_NAME (field) != 0
970 || targetm.align_anon_bitfield ())
972 unsigned int type_align = TYPE_ALIGN (type);
974 #ifdef ADJUST_FIELD_ALIGN
975 if (! TYPE_USER_ALIGN (type))
976 type_align = ADJUST_FIELD_ALIGN (field, type_align);
977 #endif
979 /* Targets might chose to handle unnamed and hence possibly
980 zero-width bitfield. Those are not influenced by #pragmas
981 or packed attributes. */
982 if (integer_zerop (DECL_SIZE (field)))
984 if (initial_max_fld_align)
985 type_align = MIN (type_align,
986 initial_max_fld_align * BITS_PER_UNIT);
988 else if (maximum_field_alignment != 0)
989 type_align = MIN (type_align, maximum_field_alignment);
990 else if (DECL_PACKED (field))
991 type_align = MIN (type_align, BITS_PER_UNIT);
993 /* The alignment of the record is increased to the maximum
994 of the current alignment, the alignment indicated on the
995 field (i.e., the alignment specified by an __aligned__
996 attribute), and the alignment indicated by the type of
997 the field. */
998 rli->record_align = MAX (rli->record_align, desired_align);
999 rli->record_align = MAX (rli->record_align, type_align);
1001 if (warn_packed)
1002 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1003 user_align |= TYPE_USER_ALIGN (type);
1006 #endif
1007 else
1009 rli->record_align = MAX (rli->record_align, desired_align);
1010 rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
1013 TYPE_USER_ALIGN (rli->t) |= user_align;
1015 return desired_align;
1018 /* Called from place_field to handle unions. */
1020 static void
1021 place_union_field (record_layout_info rli, tree field)
1023 update_alignment_for_field (rli, field, /*known_align=*/0);
1025 DECL_FIELD_OFFSET (field) = size_zero_node;
1026 DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
1027 SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
1029 /* If this is an ERROR_MARK return *after* having set the
1030 field at the start of the union. This helps when parsing
1031 invalid fields. */
1032 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK)
1033 return;
1035 /* We assume the union's size will be a multiple of a byte so we don't
1036 bother with BITPOS. */
1037 if (TREE_CODE (rli->t) == UNION_TYPE)
1038 rli->offset = size_binop (MAX_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1039 else if (TREE_CODE (rli->t) == QUAL_UNION_TYPE)
1040 rli->offset = fold_build3 (COND_EXPR, sizetype, DECL_QUALIFIER (field),
1041 DECL_SIZE_UNIT (field), rli->offset);
1044 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
1045 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
1046 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
1047 units of alignment than the underlying TYPE. */
1048 static int
1049 excess_unit_span (HOST_WIDE_INT byte_offset, HOST_WIDE_INT bit_offset,
1050 HOST_WIDE_INT size, HOST_WIDE_INT align, tree type)
1052 /* Note that the calculation of OFFSET might overflow; we calculate it so
1053 that we still get the right result as long as ALIGN is a power of two. */
1054 unsigned HOST_WIDE_INT offset = byte_offset * BITS_PER_UNIT + bit_offset;
1056 offset = offset % align;
1057 return ((offset + size + align - 1) / align
1058 > ((unsigned HOST_WIDE_INT) tree_low_cst (TYPE_SIZE (type), 1)
1059 / align));
1061 #endif
1063 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
1064 is a FIELD_DECL to be added after those fields already present in
1065 T. (FIELD is not actually added to the TYPE_FIELDS list here;
1066 callers that desire that behavior must manually perform that step.) */
1068 void
1069 place_field (record_layout_info rli, tree field)
1071 /* The alignment required for FIELD. */
1072 unsigned int desired_align;
1073 /* The alignment FIELD would have if we just dropped it into the
1074 record as it presently stands. */
1075 unsigned int known_align;
1076 unsigned int actual_align;
1077 /* The type of this field. */
1078 tree type = TREE_TYPE (field);
1080 gcc_assert (TREE_CODE (field) != ERROR_MARK);
1082 /* If FIELD is static, then treat it like a separate variable, not
1083 really like a structure field. If it is a FUNCTION_DECL, it's a
1084 method. In both cases, all we do is lay out the decl, and we do
1085 it *after* the record is laid out. */
1086 if (TREE_CODE (field) == VAR_DECL)
1088 vec_safe_push (rli->pending_statics, field);
1089 return;
1092 /* Enumerators and enum types which are local to this class need not
1093 be laid out. Likewise for initialized constant fields. */
1094 else if (TREE_CODE (field) != FIELD_DECL)
1095 return;
1097 /* Unions are laid out very differently than records, so split
1098 that code off to another function. */
1099 else if (TREE_CODE (rli->t) != RECORD_TYPE)
1101 place_union_field (rli, field);
1102 return;
1105 else if (TREE_CODE (type) == ERROR_MARK)
1107 /* Place this field at the current allocation position, so we
1108 maintain monotonicity. */
1109 DECL_FIELD_OFFSET (field) = rli->offset;
1110 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1111 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1112 return;
1115 /* Work out the known alignment so far. Note that A & (-A) is the
1116 value of the least-significant bit in A that is one. */
1117 if (! integer_zerop (rli->bitpos))
1118 known_align = (tree_low_cst (rli->bitpos, 1)
1119 & - tree_low_cst (rli->bitpos, 1));
1120 else if (integer_zerop (rli->offset))
1121 known_align = 0;
1122 else if (host_integerp (rli->offset, 1))
1123 known_align = (BITS_PER_UNIT
1124 * (tree_low_cst (rli->offset, 1)
1125 & - tree_low_cst (rli->offset, 1)));
1126 else
1127 known_align = rli->offset_align;
1129 desired_align = update_alignment_for_field (rli, field, known_align);
1130 if (known_align == 0)
1131 known_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1133 if (warn_packed && DECL_PACKED (field))
1135 if (known_align >= TYPE_ALIGN (type))
1137 if (TYPE_ALIGN (type) > desired_align)
1139 if (STRICT_ALIGNMENT)
1140 warning (OPT_Wattributes, "packed attribute causes "
1141 "inefficient alignment for %q+D", field);
1142 /* Don't warn if DECL_PACKED was set by the type. */
1143 else if (!TYPE_PACKED (rli->t))
1144 warning (OPT_Wattributes, "packed attribute is "
1145 "unnecessary for %q+D", field);
1148 else
1149 rli->packed_maybe_necessary = 1;
1152 /* Does this field automatically have alignment it needs by virtue
1153 of the fields that precede it and the record's own alignment? */
1154 if (known_align < desired_align)
1156 /* No, we need to skip space before this field.
1157 Bump the cumulative size to multiple of field alignment. */
1159 if (!targetm.ms_bitfield_layout_p (rli->t)
1160 && DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION)
1161 warning (OPT_Wpadded, "padding struct to align %q+D", field);
1163 /* If the alignment is still within offset_align, just align
1164 the bit position. */
1165 if (desired_align < rli->offset_align)
1166 rli->bitpos = round_up (rli->bitpos, desired_align);
1167 else
1169 /* First adjust OFFSET by the partial bits, then align. */
1170 rli->offset
1171 = size_binop (PLUS_EXPR, rli->offset,
1172 fold_convert (sizetype,
1173 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1174 bitsize_unit_node)));
1175 rli->bitpos = bitsize_zero_node;
1177 rli->offset = round_up (rli->offset, desired_align / BITS_PER_UNIT);
1180 if (! TREE_CONSTANT (rli->offset))
1181 rli->offset_align = desired_align;
1182 if (targetm.ms_bitfield_layout_p (rli->t))
1183 rli->prev_field = NULL;
1186 /* Handle compatibility with PCC. Note that if the record has any
1187 variable-sized fields, we need not worry about compatibility. */
1188 #ifdef PCC_BITFIELD_TYPE_MATTERS
1189 if (PCC_BITFIELD_TYPE_MATTERS
1190 && ! targetm.ms_bitfield_layout_p (rli->t)
1191 && TREE_CODE (field) == FIELD_DECL
1192 && type != error_mark_node
1193 && DECL_BIT_FIELD (field)
1194 && (! DECL_PACKED (field)
1195 /* Enter for these packed fields only to issue a warning. */
1196 || TYPE_ALIGN (type) <= BITS_PER_UNIT)
1197 && maximum_field_alignment == 0
1198 && ! integer_zerop (DECL_SIZE (field))
1199 && host_integerp (DECL_SIZE (field), 1)
1200 && host_integerp (rli->offset, 1)
1201 && host_integerp (TYPE_SIZE (type), 1))
1203 unsigned int type_align = TYPE_ALIGN (type);
1204 tree dsize = DECL_SIZE (field);
1205 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
1206 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
1207 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
1209 #ifdef ADJUST_FIELD_ALIGN
1210 if (! TYPE_USER_ALIGN (type))
1211 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1212 #endif
1214 /* A bit field may not span more units of alignment of its type
1215 than its type itself. Advance to next boundary if necessary. */
1216 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1218 if (DECL_PACKED (field))
1220 if (warn_packed_bitfield_compat == 1)
1221 inform
1222 (input_location,
1223 "offset of packed bit-field %qD has changed in GCC 4.4",
1224 field);
1226 else
1227 rli->bitpos = round_up (rli->bitpos, type_align);
1230 if (! DECL_PACKED (field))
1231 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1233 #endif
1235 #ifdef BITFIELD_NBYTES_LIMITED
1236 if (BITFIELD_NBYTES_LIMITED
1237 && ! targetm.ms_bitfield_layout_p (rli->t)
1238 && TREE_CODE (field) == FIELD_DECL
1239 && type != error_mark_node
1240 && DECL_BIT_FIELD_TYPE (field)
1241 && ! DECL_PACKED (field)
1242 && ! integer_zerop (DECL_SIZE (field))
1243 && host_integerp (DECL_SIZE (field), 1)
1244 && host_integerp (rli->offset, 1)
1245 && host_integerp (TYPE_SIZE (type), 1))
1247 unsigned int type_align = TYPE_ALIGN (type);
1248 tree dsize = DECL_SIZE (field);
1249 HOST_WIDE_INT field_size = tree_low_cst (dsize, 1);
1250 HOST_WIDE_INT offset = tree_low_cst (rli->offset, 0);
1251 HOST_WIDE_INT bit_offset = tree_low_cst (rli->bitpos, 0);
1253 #ifdef ADJUST_FIELD_ALIGN
1254 if (! TYPE_USER_ALIGN (type))
1255 type_align = ADJUST_FIELD_ALIGN (field, type_align);
1256 #endif
1258 if (maximum_field_alignment != 0)
1259 type_align = MIN (type_align, maximum_field_alignment);
1260 /* ??? This test is opposite the test in the containing if
1261 statement, so this code is unreachable currently. */
1262 else if (DECL_PACKED (field))
1263 type_align = MIN (type_align, BITS_PER_UNIT);
1265 /* A bit field may not span the unit of alignment of its type.
1266 Advance to next boundary if necessary. */
1267 if (excess_unit_span (offset, bit_offset, field_size, type_align, type))
1268 rli->bitpos = round_up (rli->bitpos, type_align);
1270 TYPE_USER_ALIGN (rli->t) |= TYPE_USER_ALIGN (type);
1272 #endif
1274 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1275 A subtlety:
1276 When a bit field is inserted into a packed record, the whole
1277 size of the underlying type is used by one or more same-size
1278 adjacent bitfields. (That is, if its long:3, 32 bits is
1279 used in the record, and any additional adjacent long bitfields are
1280 packed into the same chunk of 32 bits. However, if the size
1281 changes, a new field of that size is allocated.) In an unpacked
1282 record, this is the same as using alignment, but not equivalent
1283 when packing.
1285 Note: for compatibility, we use the type size, not the type alignment
1286 to determine alignment, since that matches the documentation */
1288 if (targetm.ms_bitfield_layout_p (rli->t))
1290 tree prev_saved = rli->prev_field;
1291 tree prev_type = prev_saved ? DECL_BIT_FIELD_TYPE (prev_saved) : NULL;
1293 /* This is a bitfield if it exists. */
1294 if (rli->prev_field)
1296 /* If both are bitfields, nonzero, and the same size, this is
1297 the middle of a run. Zero declared size fields are special
1298 and handled as "end of run". (Note: it's nonzero declared
1299 size, but equal type sizes!) (Since we know that both
1300 the current and previous fields are bitfields by the
1301 time we check it, DECL_SIZE must be present for both.) */
1302 if (DECL_BIT_FIELD_TYPE (field)
1303 && !integer_zerop (DECL_SIZE (field))
1304 && !integer_zerop (DECL_SIZE (rli->prev_field))
1305 && host_integerp (DECL_SIZE (rli->prev_field), 0)
1306 && host_integerp (TYPE_SIZE (type), 0)
1307 && simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type)))
1309 /* We're in the middle of a run of equal type size fields; make
1310 sure we realign if we run out of bits. (Not decl size,
1311 type size!) */
1312 HOST_WIDE_INT bitsize = tree_low_cst (DECL_SIZE (field), 1);
1314 if (rli->remaining_in_alignment < bitsize)
1316 HOST_WIDE_INT typesize = tree_low_cst (TYPE_SIZE (type), 1);
1318 /* out of bits; bump up to next 'word'. */
1319 rli->bitpos
1320 = size_binop (PLUS_EXPR, rli->bitpos,
1321 bitsize_int (rli->remaining_in_alignment));
1322 rli->prev_field = field;
1323 if (typesize < bitsize)
1324 rli->remaining_in_alignment = 0;
1325 else
1326 rli->remaining_in_alignment = typesize - bitsize;
1328 else
1329 rli->remaining_in_alignment -= bitsize;
1331 else
1333 /* End of a run: if leaving a run of bitfields of the same type
1334 size, we have to "use up" the rest of the bits of the type
1335 size.
1337 Compute the new position as the sum of the size for the prior
1338 type and where we first started working on that type.
1339 Note: since the beginning of the field was aligned then
1340 of course the end will be too. No round needed. */
1342 if (!integer_zerop (DECL_SIZE (rli->prev_field)))
1344 rli->bitpos
1345 = size_binop (PLUS_EXPR, rli->bitpos,
1346 bitsize_int (rli->remaining_in_alignment));
1348 else
1349 /* We "use up" size zero fields; the code below should behave
1350 as if the prior field was not a bitfield. */
1351 prev_saved = NULL;
1353 /* Cause a new bitfield to be captured, either this time (if
1354 currently a bitfield) or next time we see one. */
1355 if (!DECL_BIT_FIELD_TYPE (field)
1356 || integer_zerop (DECL_SIZE (field)))
1357 rli->prev_field = NULL;
1360 normalize_rli (rli);
1363 /* If we're starting a new run of same type size bitfields
1364 (or a run of non-bitfields), set up the "first of the run"
1365 fields.
1367 That is, if the current field is not a bitfield, or if there
1368 was a prior bitfield the type sizes differ, or if there wasn't
1369 a prior bitfield the size of the current field is nonzero.
1371 Note: we must be sure to test ONLY the type size if there was
1372 a prior bitfield and ONLY for the current field being zero if
1373 there wasn't. */
1375 if (!DECL_BIT_FIELD_TYPE (field)
1376 || (prev_saved != NULL
1377 ? !simple_cst_equal (TYPE_SIZE (type), TYPE_SIZE (prev_type))
1378 : !integer_zerop (DECL_SIZE (field)) ))
1380 /* Never smaller than a byte for compatibility. */
1381 unsigned int type_align = BITS_PER_UNIT;
1383 /* (When not a bitfield), we could be seeing a flex array (with
1384 no DECL_SIZE). Since we won't be using remaining_in_alignment
1385 until we see a bitfield (and come by here again) we just skip
1386 calculating it. */
1387 if (DECL_SIZE (field) != NULL
1388 && host_integerp (TYPE_SIZE (TREE_TYPE (field)), 1)
1389 && host_integerp (DECL_SIZE (field), 1))
1391 unsigned HOST_WIDE_INT bitsize
1392 = tree_low_cst (DECL_SIZE (field), 1);
1393 unsigned HOST_WIDE_INT typesize
1394 = tree_low_cst (TYPE_SIZE (TREE_TYPE (field)), 1);
1396 if (typesize < bitsize)
1397 rli->remaining_in_alignment = 0;
1398 else
1399 rli->remaining_in_alignment = typesize - bitsize;
1402 /* Now align (conventionally) for the new type. */
1403 type_align = TYPE_ALIGN (TREE_TYPE (field));
1405 if (maximum_field_alignment != 0)
1406 type_align = MIN (type_align, maximum_field_alignment);
1408 rli->bitpos = round_up (rli->bitpos, type_align);
1410 /* If we really aligned, don't allow subsequent bitfields
1411 to undo that. */
1412 rli->prev_field = NULL;
1416 /* Offset so far becomes the position of this field after normalizing. */
1417 normalize_rli (rli);
1418 DECL_FIELD_OFFSET (field) = rli->offset;
1419 DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
1420 SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
1422 /* If this field ended up more aligned than we thought it would be (we
1423 approximate this by seeing if its position changed), lay out the field
1424 again; perhaps we can use an integral mode for it now. */
1425 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field)))
1426 actual_align = (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1427 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1));
1428 else if (integer_zerop (DECL_FIELD_OFFSET (field)))
1429 actual_align = MAX (BIGGEST_ALIGNMENT, rli->record_align);
1430 else if (host_integerp (DECL_FIELD_OFFSET (field), 1))
1431 actual_align = (BITS_PER_UNIT
1432 * (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1433 & - tree_low_cst (DECL_FIELD_OFFSET (field), 1)));
1434 else
1435 actual_align = DECL_OFFSET_ALIGN (field);
1436 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1437 store / extract bit field operations will check the alignment of the
1438 record against the mode of bit fields. */
1440 if (known_align != actual_align)
1441 layout_decl (field, actual_align);
1443 if (rli->prev_field == NULL && DECL_BIT_FIELD_TYPE (field))
1444 rli->prev_field = field;
1446 /* Now add size of this field to the size of the record. If the size is
1447 not constant, treat the field as being a multiple of bytes and just
1448 adjust the offset, resetting the bit position. Otherwise, apportion the
1449 size amongst the bit position and offset. First handle the case of an
1450 unspecified size, which can happen when we have an invalid nested struct
1451 definition, such as struct j { struct j { int i; } }. The error message
1452 is printed in finish_struct. */
1453 if (DECL_SIZE (field) == 0)
1454 /* Do nothing. */;
1455 else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
1456 || TREE_OVERFLOW (DECL_SIZE (field)))
1458 rli->offset
1459 = size_binop (PLUS_EXPR, rli->offset,
1460 fold_convert (sizetype,
1461 size_binop (CEIL_DIV_EXPR, rli->bitpos,
1462 bitsize_unit_node)));
1463 rli->offset
1464 = size_binop (PLUS_EXPR, rli->offset, DECL_SIZE_UNIT (field));
1465 rli->bitpos = bitsize_zero_node;
1466 rli->offset_align = MIN (rli->offset_align, desired_align);
1468 else if (targetm.ms_bitfield_layout_p (rli->t))
1470 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1472 /* If we ended a bitfield before the full length of the type then
1473 pad the struct out to the full length of the last type. */
1474 if ((DECL_CHAIN (field) == NULL
1475 || TREE_CODE (DECL_CHAIN (field)) != FIELD_DECL)
1476 && DECL_BIT_FIELD_TYPE (field)
1477 && !integer_zerop (DECL_SIZE (field)))
1478 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos,
1479 bitsize_int (rli->remaining_in_alignment));
1481 normalize_rli (rli);
1483 else
1485 rli->bitpos = size_binop (PLUS_EXPR, rli->bitpos, DECL_SIZE (field));
1486 normalize_rli (rli);
1490 /* Assuming that all the fields have been laid out, this function uses
1491 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1492 indicated by RLI. */
1494 static void
1495 finalize_record_size (record_layout_info rli)
1497 tree unpadded_size, unpadded_size_unit;
1499 /* Now we want just byte and bit offsets, so set the offset alignment
1500 to be a byte and then normalize. */
1501 rli->offset_align = BITS_PER_UNIT;
1502 normalize_rli (rli);
1504 /* Determine the desired alignment. */
1505 #ifdef ROUND_TYPE_ALIGN
1506 TYPE_ALIGN (rli->t) = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t),
1507 rli->record_align);
1508 #else
1509 TYPE_ALIGN (rli->t) = MAX (TYPE_ALIGN (rli->t), rli->record_align);
1510 #endif
1512 /* Compute the size so far. Be sure to allow for extra bits in the
1513 size in bytes. We have guaranteed above that it will be no more
1514 than a single byte. */
1515 unpadded_size = rli_size_so_far (rli);
1516 unpadded_size_unit = rli_size_unit_so_far (rli);
1517 if (! integer_zerop (rli->bitpos))
1518 unpadded_size_unit
1519 = size_binop (PLUS_EXPR, unpadded_size_unit, size_one_node);
1521 /* Round the size up to be a multiple of the required alignment. */
1522 TYPE_SIZE (rli->t) = round_up (unpadded_size, TYPE_ALIGN (rli->t));
1523 TYPE_SIZE_UNIT (rli->t)
1524 = round_up (unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t));
1526 if (TREE_CONSTANT (unpadded_size)
1527 && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0
1528 && input_location != BUILTINS_LOCATION)
1529 warning (OPT_Wpadded, "padding struct size to alignment boundary");
1531 if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE
1532 && TYPE_PACKED (rli->t) && ! rli->packed_maybe_necessary
1533 && TREE_CONSTANT (unpadded_size))
1535 tree unpacked_size;
1537 #ifdef ROUND_TYPE_ALIGN
1538 rli->unpacked_align
1539 = ROUND_TYPE_ALIGN (rli->t, TYPE_ALIGN (rli->t), rli->unpacked_align);
1540 #else
1541 rli->unpacked_align = MAX (TYPE_ALIGN (rli->t), rli->unpacked_align);
1542 #endif
1544 unpacked_size = round_up (TYPE_SIZE (rli->t), rli->unpacked_align);
1545 if (simple_cst_equal (unpacked_size, TYPE_SIZE (rli->t)))
1547 if (TYPE_NAME (rli->t))
1549 tree name;
1551 if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE)
1552 name = TYPE_NAME (rli->t);
1553 else
1554 name = DECL_NAME (TYPE_NAME (rli->t));
1556 if (STRICT_ALIGNMENT)
1557 warning (OPT_Wpacked, "packed attribute causes inefficient "
1558 "alignment for %qE", name);
1559 else
1560 warning (OPT_Wpacked,
1561 "packed attribute is unnecessary for %qE", name);
1563 else
1565 if (STRICT_ALIGNMENT)
1566 warning (OPT_Wpacked,
1567 "packed attribute causes inefficient alignment");
1568 else
1569 warning (OPT_Wpacked, "packed attribute is unnecessary");
1575 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1577 void
1578 compute_record_mode (tree type)
1580 tree field;
1581 enum machine_mode mode = VOIDmode;
1583 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1584 However, if possible, we use a mode that fits in a register
1585 instead, in order to allow for better optimization down the
1586 line. */
1587 SET_TYPE_MODE (type, BLKmode);
1589 if (! host_integerp (TYPE_SIZE (type), 1))
1590 return;
1592 /* A record which has any BLKmode members must itself be
1593 BLKmode; it can't go in a register. Unless the member is
1594 BLKmode only because it isn't aligned. */
1595 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1597 if (TREE_CODE (field) != FIELD_DECL)
1598 continue;
1600 if (TREE_CODE (TREE_TYPE (field)) == ERROR_MARK
1601 || (TYPE_MODE (TREE_TYPE (field)) == BLKmode
1602 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field))
1603 && !(TYPE_SIZE (TREE_TYPE (field)) != 0
1604 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
1605 || ! host_integerp (bit_position (field), 1)
1606 || DECL_SIZE (field) == 0
1607 || ! host_integerp (DECL_SIZE (field), 1))
1608 return;
1610 /* If this field is the whole struct, remember its mode so
1611 that, say, we can put a double in a class into a DF
1612 register instead of forcing it to live in the stack. */
1613 if (simple_cst_equal (TYPE_SIZE (type), DECL_SIZE (field)))
1614 mode = DECL_MODE (field);
1616 /* With some targets, it is sub-optimal to access an aligned
1617 BLKmode structure as a scalar. */
1618 if (targetm.member_type_forces_blk (field, mode))
1619 return;
1622 /* If we only have one real field; use its mode if that mode's size
1623 matches the type's size. This only applies to RECORD_TYPE. This
1624 does not apply to unions. */
1625 if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode
1626 && host_integerp (TYPE_SIZE (type), 1)
1627 && GET_MODE_BITSIZE (mode) == TREE_INT_CST_LOW (TYPE_SIZE (type)))
1628 SET_TYPE_MODE (type, mode);
1629 else
1630 SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1));
1632 /* If structure's known alignment is less than what the scalar
1633 mode would need, and it matters, then stick with BLKmode. */
1634 if (TYPE_MODE (type) != BLKmode
1635 && STRICT_ALIGNMENT
1636 && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT
1637 || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))
1639 /* If this is the only reason this type is BLKmode, then
1640 don't force containing types to be BLKmode. */
1641 TYPE_NO_FORCE_BLK (type) = 1;
1642 SET_TYPE_MODE (type, BLKmode);
1646 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1647 out. */
1649 static void
1650 finalize_type_size (tree type)
1652 /* Normally, use the alignment corresponding to the mode chosen.
1653 However, where strict alignment is not required, avoid
1654 over-aligning structures, since most compilers do not do this
1655 alignment. */
1657 if (TYPE_MODE (type) != BLKmode && TYPE_MODE (type) != VOIDmode
1658 && (STRICT_ALIGNMENT
1659 || (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
1660 && TREE_CODE (type) != QUAL_UNION_TYPE
1661 && TREE_CODE (type) != ARRAY_TYPE)))
1663 unsigned mode_align = GET_MODE_ALIGNMENT (TYPE_MODE (type));
1665 /* Don't override a larger alignment requirement coming from a user
1666 alignment of one of the fields. */
1667 if (mode_align >= TYPE_ALIGN (type))
1669 TYPE_ALIGN (type) = mode_align;
1670 TYPE_USER_ALIGN (type) = 0;
1674 /* Do machine-dependent extra alignment. */
1675 #ifdef ROUND_TYPE_ALIGN
1676 TYPE_ALIGN (type)
1677 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (type), BITS_PER_UNIT);
1678 #endif
1680 /* If we failed to find a simple way to calculate the unit size
1681 of the type, find it by division. */
1682 if (TYPE_SIZE_UNIT (type) == 0 && TYPE_SIZE (type) != 0)
1683 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1684 result will fit in sizetype. We will get more efficient code using
1685 sizetype, so we force a conversion. */
1686 TYPE_SIZE_UNIT (type)
1687 = fold_convert (sizetype,
1688 size_binop (FLOOR_DIV_EXPR, TYPE_SIZE (type),
1689 bitsize_unit_node));
1691 if (TYPE_SIZE (type) != 0)
1693 TYPE_SIZE (type) = round_up (TYPE_SIZE (type), TYPE_ALIGN (type));
1694 TYPE_SIZE_UNIT (type)
1695 = round_up (TYPE_SIZE_UNIT (type), TYPE_ALIGN_UNIT (type));
1698 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1699 if (TYPE_SIZE (type) != 0 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1700 TYPE_SIZE (type) = variable_size (TYPE_SIZE (type));
1701 if (TYPE_SIZE_UNIT (type) != 0
1702 && TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST)
1703 TYPE_SIZE_UNIT (type) = variable_size (TYPE_SIZE_UNIT (type));
1705 /* Also layout any other variants of the type. */
1706 if (TYPE_NEXT_VARIANT (type)
1707 || type != TYPE_MAIN_VARIANT (type))
1709 tree variant;
1710 /* Record layout info of this variant. */
1711 tree size = TYPE_SIZE (type);
1712 tree size_unit = TYPE_SIZE_UNIT (type);
1713 unsigned int align = TYPE_ALIGN (type);
1714 unsigned int user_align = TYPE_USER_ALIGN (type);
1715 enum machine_mode mode = TYPE_MODE (type);
1717 /* Copy it into all variants. */
1718 for (variant = TYPE_MAIN_VARIANT (type);
1719 variant != 0;
1720 variant = TYPE_NEXT_VARIANT (variant))
1722 TYPE_SIZE (variant) = size;
1723 TYPE_SIZE_UNIT (variant) = size_unit;
1724 TYPE_ALIGN (variant) = align;
1725 TYPE_USER_ALIGN (variant) = user_align;
1726 SET_TYPE_MODE (variant, mode);
1731 /* Return a new underlying object for a bitfield started with FIELD. */
1733 static tree
1734 start_bitfield_representative (tree field)
1736 tree repr = make_node (FIELD_DECL);
1737 DECL_FIELD_OFFSET (repr) = DECL_FIELD_OFFSET (field);
1738 /* Force the representative to begin at a BITS_PER_UNIT aligned
1739 boundary - C++ may use tail-padding of a base object to
1740 continue packing bits so the bitfield region does not start
1741 at bit zero (see g++.dg/abi/bitfield5.C for example).
1742 Unallocated bits may happen for other reasons as well,
1743 for example Ada which allows explicit bit-granular structure layout. */
1744 DECL_FIELD_BIT_OFFSET (repr)
1745 = size_binop (BIT_AND_EXPR,
1746 DECL_FIELD_BIT_OFFSET (field),
1747 bitsize_int (~(BITS_PER_UNIT - 1)));
1748 SET_DECL_OFFSET_ALIGN (repr, DECL_OFFSET_ALIGN (field));
1749 DECL_SIZE (repr) = DECL_SIZE (field);
1750 DECL_SIZE_UNIT (repr) = DECL_SIZE_UNIT (field);
1751 DECL_PACKED (repr) = DECL_PACKED (field);
1752 DECL_CONTEXT (repr) = DECL_CONTEXT (field);
1753 return repr;
1756 /* Finish up a bitfield group that was started by creating the underlying
1757 object REPR with the last field in the bitfield group FIELD. */
1759 static void
1760 finish_bitfield_representative (tree repr, tree field)
1762 unsigned HOST_WIDE_INT bitsize, maxbitsize;
1763 enum machine_mode mode;
1764 tree nextf, size;
1766 size = size_diffop (DECL_FIELD_OFFSET (field),
1767 DECL_FIELD_OFFSET (repr));
1768 gcc_assert (host_integerp (size, 1));
1769 bitsize = (tree_low_cst (size, 1) * BITS_PER_UNIT
1770 + tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1771 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1)
1772 + tree_low_cst (DECL_SIZE (field), 1));
1774 /* Round up bitsize to multiples of BITS_PER_UNIT. */
1775 bitsize = (bitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1777 /* Now nothing tells us how to pad out bitsize ... */
1778 nextf = DECL_CHAIN (field);
1779 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
1780 nextf = DECL_CHAIN (nextf);
1781 if (nextf)
1783 tree maxsize;
1784 /* If there was an error, the field may be not laid out
1785 correctly. Don't bother to do anything. */
1786 if (TREE_TYPE (nextf) == error_mark_node)
1787 return;
1788 maxsize = size_diffop (DECL_FIELD_OFFSET (nextf),
1789 DECL_FIELD_OFFSET (repr));
1790 if (host_integerp (maxsize, 1))
1792 maxbitsize = (tree_low_cst (maxsize, 1) * BITS_PER_UNIT
1793 + tree_low_cst (DECL_FIELD_BIT_OFFSET (nextf), 1)
1794 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
1795 /* If the group ends within a bitfield nextf does not need to be
1796 aligned to BITS_PER_UNIT. Thus round up. */
1797 maxbitsize = (maxbitsize + BITS_PER_UNIT - 1) & ~(BITS_PER_UNIT - 1);
1799 else
1800 maxbitsize = bitsize;
1802 else
1804 /* ??? If you consider that tail-padding of this struct might be
1805 re-used when deriving from it we cannot really do the following
1806 and thus need to set maxsize to bitsize? Also we cannot
1807 generally rely on maxsize to fold to an integer constant, so
1808 use bitsize as fallback for this case. */
1809 tree maxsize = size_diffop (TYPE_SIZE_UNIT (DECL_CONTEXT (field)),
1810 DECL_FIELD_OFFSET (repr));
1811 if (host_integerp (maxsize, 1))
1812 maxbitsize = (tree_low_cst (maxsize, 1) * BITS_PER_UNIT
1813 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
1814 else
1815 maxbitsize = bitsize;
1818 /* Only if we don't artificially break up the representative in
1819 the middle of a large bitfield with different possibly
1820 overlapping representatives. And all representatives start
1821 at byte offset. */
1822 gcc_assert (maxbitsize % BITS_PER_UNIT == 0);
1824 /* Find the smallest nice mode to use. */
1825 for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); mode != VOIDmode;
1826 mode = GET_MODE_WIDER_MODE (mode))
1827 if (GET_MODE_BITSIZE (mode) >= bitsize)
1828 break;
1829 if (mode != VOIDmode
1830 && (GET_MODE_BITSIZE (mode) > maxbitsize
1831 || GET_MODE_BITSIZE (mode) > MAX_FIXED_MODE_SIZE))
1832 mode = VOIDmode;
1834 if (mode == VOIDmode)
1836 /* We really want a BLKmode representative only as a last resort,
1837 considering the member b in
1838 struct { int a : 7; int b : 17; int c; } __attribute__((packed));
1839 Otherwise we simply want to split the representative up
1840 allowing for overlaps within the bitfield region as required for
1841 struct { int a : 7; int b : 7;
1842 int c : 10; int d; } __attribute__((packed));
1843 [0, 15] HImode for a and b, [8, 23] HImode for c. */
1844 DECL_SIZE (repr) = bitsize_int (bitsize);
1845 DECL_SIZE_UNIT (repr) = size_int (bitsize / BITS_PER_UNIT);
1846 DECL_MODE (repr) = BLKmode;
1847 TREE_TYPE (repr) = build_array_type_nelts (unsigned_char_type_node,
1848 bitsize / BITS_PER_UNIT);
1850 else
1852 unsigned HOST_WIDE_INT modesize = GET_MODE_BITSIZE (mode);
1853 DECL_SIZE (repr) = bitsize_int (modesize);
1854 DECL_SIZE_UNIT (repr) = size_int (modesize / BITS_PER_UNIT);
1855 DECL_MODE (repr) = mode;
1856 TREE_TYPE (repr) = lang_hooks.types.type_for_mode (mode, 1);
1859 /* Remember whether the bitfield group is at the end of the
1860 structure or not. */
1861 DECL_CHAIN (repr) = nextf;
1864 /* Compute and set FIELD_DECLs for the underlying objects we should
1865 use for bitfield access for the structure laid out with RLI. */
1867 static void
1868 finish_bitfield_layout (record_layout_info rli)
1870 tree field, prev;
1871 tree repr = NULL_TREE;
1873 /* Unions would be special, for the ease of type-punning optimizations
1874 we could use the underlying type as hint for the representative
1875 if the bitfield would fit and the representative would not exceed
1876 the union in size. */
1877 if (TREE_CODE (rli->t) != RECORD_TYPE)
1878 return;
1880 for (prev = NULL_TREE, field = TYPE_FIELDS (rli->t);
1881 field; field = DECL_CHAIN (field))
1883 if (TREE_CODE (field) != FIELD_DECL)
1884 continue;
1886 /* In the C++ memory model, consecutive bit fields in a structure are
1887 considered one memory location and updating a memory location
1888 may not store into adjacent memory locations. */
1889 if (!repr
1890 && DECL_BIT_FIELD_TYPE (field))
1892 /* Start new representative. */
1893 repr = start_bitfield_representative (field);
1895 else if (repr
1896 && ! DECL_BIT_FIELD_TYPE (field))
1898 /* Finish off new representative. */
1899 finish_bitfield_representative (repr, prev);
1900 repr = NULL_TREE;
1902 else if (DECL_BIT_FIELD_TYPE (field))
1904 gcc_assert (repr != NULL_TREE);
1906 /* Zero-size bitfields finish off a representative and
1907 do not have a representative themselves. This is
1908 required by the C++ memory model. */
1909 if (integer_zerop (DECL_SIZE (field)))
1911 finish_bitfield_representative (repr, prev);
1912 repr = NULL_TREE;
1915 /* We assume that either DECL_FIELD_OFFSET of the representative
1916 and each bitfield member is a constant or they are equal.
1917 This is because we need to be able to compute the bit-offset
1918 of each field relative to the representative in get_bit_range
1919 during RTL expansion.
1920 If these constraints are not met, simply force a new
1921 representative to be generated. That will at most
1922 generate worse code but still maintain correctness with
1923 respect to the C++ memory model. */
1924 else if (!((host_integerp (DECL_FIELD_OFFSET (repr), 1)
1925 && host_integerp (DECL_FIELD_OFFSET (field), 1))
1926 || operand_equal_p (DECL_FIELD_OFFSET (repr),
1927 DECL_FIELD_OFFSET (field), 0)))
1929 finish_bitfield_representative (repr, prev);
1930 repr = start_bitfield_representative (field);
1933 else
1934 continue;
1936 if (repr)
1937 DECL_BIT_FIELD_REPRESENTATIVE (field) = repr;
1939 prev = field;
1942 if (repr)
1943 finish_bitfield_representative (repr, prev);
1946 /* Do all of the work required to layout the type indicated by RLI,
1947 once the fields have been laid out. This function will call `free'
1948 for RLI, unless FREE_P is false. Passing a value other than false
1949 for FREE_P is bad practice; this option only exists to support the
1950 G++ 3.2 ABI. */
1952 void
1953 finish_record_layout (record_layout_info rli, int free_p)
1955 tree variant;
1957 /* Compute the final size. */
1958 finalize_record_size (rli);
1960 /* Compute the TYPE_MODE for the record. */
1961 compute_record_mode (rli->t);
1963 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1964 finalize_type_size (rli->t);
1966 /* Compute bitfield representatives. */
1967 finish_bitfield_layout (rli);
1969 /* Propagate TYPE_PACKED to variants. With C++ templates,
1970 handle_packed_attribute is too early to do this. */
1971 for (variant = TYPE_NEXT_VARIANT (rli->t); variant;
1972 variant = TYPE_NEXT_VARIANT (variant))
1973 TYPE_PACKED (variant) = TYPE_PACKED (rli->t);
1975 /* Lay out any static members. This is done now because their type
1976 may use the record's type. */
1977 while (!vec_safe_is_empty (rli->pending_statics))
1978 layout_decl (rli->pending_statics->pop (), 0);
1980 /* Clean up. */
1981 if (free_p)
1983 vec_free (rli->pending_statics);
1984 free (rli);
1989 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
1990 NAME, its fields are chained in reverse on FIELDS.
1992 If ALIGN_TYPE is non-null, it is given the same alignment as
1993 ALIGN_TYPE. */
1995 void
1996 finish_builtin_struct (tree type, const char *name, tree fields,
1997 tree align_type)
1999 tree tail, next;
2001 for (tail = NULL_TREE; fields; tail = fields, fields = next)
2003 DECL_FIELD_CONTEXT (fields) = type;
2004 next = DECL_CHAIN (fields);
2005 DECL_CHAIN (fields) = tail;
2007 TYPE_FIELDS (type) = tail;
2009 if (align_type)
2011 TYPE_ALIGN (type) = TYPE_ALIGN (align_type);
2012 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (align_type);
2015 layout_type (type);
2016 #if 0 /* not yet, should get fixed properly later */
2017 TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
2018 #else
2019 TYPE_NAME (type) = build_decl (BUILTINS_LOCATION,
2020 TYPE_DECL, get_identifier (name), type);
2021 #endif
2022 TYPE_STUB_DECL (type) = TYPE_NAME (type);
2023 layout_decl (TYPE_NAME (type), 0);
2026 /* Calculate the mode, size, and alignment for TYPE.
2027 For an array type, calculate the element separation as well.
2028 Record TYPE on the chain of permanent or temporary types
2029 so that dbxout will find out about it.
2031 TYPE_SIZE of a type is nonzero if the type has been laid out already.
2032 layout_type does nothing on such a type.
2034 If the type is incomplete, its TYPE_SIZE remains zero. */
2036 void
2037 layout_type (tree type)
2039 gcc_assert (type);
2041 if (type == error_mark_node)
2042 return;
2044 /* Do nothing if type has been laid out before. */
2045 if (TYPE_SIZE (type))
2046 return;
2048 switch (TREE_CODE (type))
2050 case LANG_TYPE:
2051 /* This kind of type is the responsibility
2052 of the language-specific code. */
2053 gcc_unreachable ();
2055 case BOOLEAN_TYPE:
2056 case INTEGER_TYPE:
2057 case ENUMERAL_TYPE:
2058 SET_TYPE_MODE (type,
2059 smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
2060 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2061 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2062 break;
2064 case REAL_TYPE:
2065 SET_TYPE_MODE (type,
2066 mode_for_size (TYPE_PRECISION (type), MODE_FLOAT, 0));
2067 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2068 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2069 break;
2071 case FIXED_POINT_TYPE:
2072 /* TYPE_MODE (type) has been set already. */
2073 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2074 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2075 break;
2077 case COMPLEX_TYPE:
2078 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2079 SET_TYPE_MODE (type,
2080 mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type)),
2081 (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
2082 ? MODE_COMPLEX_FLOAT : MODE_COMPLEX_INT),
2083 0));
2084 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
2085 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE (type)));
2086 break;
2088 case VECTOR_TYPE:
2090 int nunits = TYPE_VECTOR_SUBPARTS (type);
2091 tree innertype = TREE_TYPE (type);
2093 gcc_assert (!(nunits & (nunits - 1)));
2095 /* Find an appropriate mode for the vector type. */
2096 if (TYPE_MODE (type) == VOIDmode)
2097 SET_TYPE_MODE (type,
2098 mode_for_vector (TYPE_MODE (innertype), nunits));
2100 TYPE_SATURATING (type) = TYPE_SATURATING (TREE_TYPE (type));
2101 TYPE_UNSIGNED (type) = TYPE_UNSIGNED (TREE_TYPE (type));
2102 TYPE_SIZE_UNIT (type) = int_const_binop (MULT_EXPR,
2103 TYPE_SIZE_UNIT (innertype),
2104 size_int (nunits));
2105 TYPE_SIZE (type) = int_const_binop (MULT_EXPR, TYPE_SIZE (innertype),
2106 bitsize_int (nunits));
2108 /* For vector types, we do not default to the mode's alignment.
2109 Instead, query a target hook, defaulting to natural alignment.
2110 This prevents ABI changes depending on whether or not native
2111 vector modes are supported. */
2112 TYPE_ALIGN (type) = targetm.vector_alignment (type);
2114 /* However, if the underlying mode requires a bigger alignment than
2115 what the target hook provides, we cannot use the mode. For now,
2116 simply reject that case. */
2117 gcc_assert (TYPE_ALIGN (type)
2118 >= GET_MODE_ALIGNMENT (TYPE_MODE (type)));
2119 break;
2122 case VOID_TYPE:
2123 /* This is an incomplete type and so doesn't have a size. */
2124 TYPE_ALIGN (type) = 1;
2125 TYPE_USER_ALIGN (type) = 0;
2126 SET_TYPE_MODE (type, VOIDmode);
2127 break;
2129 case OFFSET_TYPE:
2130 TYPE_SIZE (type) = bitsize_int (POINTER_SIZE);
2131 TYPE_SIZE_UNIT (type) = size_int (POINTER_SIZE / BITS_PER_UNIT);
2132 /* A pointer might be MODE_PARTIAL_INT,
2133 but ptrdiff_t must be integral. */
2134 SET_TYPE_MODE (type, mode_for_size (POINTER_SIZE, MODE_INT, 0));
2135 TYPE_PRECISION (type) = POINTER_SIZE;
2136 break;
2138 case FUNCTION_TYPE:
2139 case METHOD_TYPE:
2140 /* It's hard to see what the mode and size of a function ought to
2141 be, but we do know the alignment is FUNCTION_BOUNDARY, so
2142 make it consistent with that. */
2143 SET_TYPE_MODE (type, mode_for_size (FUNCTION_BOUNDARY, MODE_INT, 0));
2144 TYPE_SIZE (type) = bitsize_int (FUNCTION_BOUNDARY);
2145 TYPE_SIZE_UNIT (type) = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2146 break;
2148 case POINTER_TYPE:
2149 case REFERENCE_TYPE:
2151 enum machine_mode mode = TYPE_MODE (type);
2152 if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
2154 addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
2155 mode = targetm.addr_space.address_mode (as);
2158 TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
2159 TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
2160 TYPE_UNSIGNED (type) = 1;
2161 TYPE_PRECISION (type) = GET_MODE_BITSIZE (mode);
2163 break;
2165 case ARRAY_TYPE:
2167 tree index = TYPE_DOMAIN (type);
2168 tree element = TREE_TYPE (type);
2170 build_pointer_type (element);
2172 /* We need to know both bounds in order to compute the size. */
2173 if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
2174 && TYPE_SIZE (element))
2176 tree ub = TYPE_MAX_VALUE (index);
2177 tree lb = TYPE_MIN_VALUE (index);
2178 tree element_size = TYPE_SIZE (element);
2179 tree length;
2181 /* Make sure that an array of zero-sized element is zero-sized
2182 regardless of its extent. */
2183 if (integer_zerop (element_size))
2184 length = size_zero_node;
2186 /* The computation should happen in the original signedness so
2187 that (possible) negative values are handled appropriately
2188 when determining overflow. */
2189 else
2191 /* ??? When it is obvious that the range is signed
2192 represent it using ssizetype. */
2193 if (TREE_CODE (lb) == INTEGER_CST
2194 && TREE_CODE (ub) == INTEGER_CST
2195 && TYPE_UNSIGNED (TREE_TYPE (lb))
2196 && tree_int_cst_lt (ub, lb))
2198 unsigned prec = TYPE_PRECISION (TREE_TYPE (lb));
2199 lb = double_int_to_tree
2200 (ssizetype,
2201 tree_to_double_int (lb).sext (prec));
2202 ub = double_int_to_tree
2203 (ssizetype,
2204 tree_to_double_int (ub).sext (prec));
2206 length
2207 = fold_convert (sizetype,
2208 size_binop (PLUS_EXPR,
2209 build_int_cst (TREE_TYPE (lb), 1),
2210 size_binop (MINUS_EXPR, ub, lb)));
2213 /* ??? We have no way to distinguish a null-sized array from an
2214 array spanning the whole sizetype range, so we arbitrarily
2215 decide that [0, -1] is the only valid representation. */
2216 if (integer_zerop (length)
2217 && TREE_OVERFLOW (length)
2218 && integer_zerop (lb))
2219 length = size_zero_node;
2221 TYPE_SIZE (type) = size_binop (MULT_EXPR, element_size,
2222 fold_convert (bitsizetype,
2223 length));
2225 /* If we know the size of the element, calculate the total size
2226 directly, rather than do some division thing below. This
2227 optimization helps Fortran assumed-size arrays (where the
2228 size of the array is determined at runtime) substantially. */
2229 if (TYPE_SIZE_UNIT (element))
2230 TYPE_SIZE_UNIT (type)
2231 = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (element), length);
2234 /* Now round the alignment and size,
2235 using machine-dependent criteria if any. */
2237 #ifdef ROUND_TYPE_ALIGN
2238 TYPE_ALIGN (type)
2239 = ROUND_TYPE_ALIGN (type, TYPE_ALIGN (element), BITS_PER_UNIT);
2240 #else
2241 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
2242 #endif
2243 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
2244 SET_TYPE_MODE (type, BLKmode);
2245 if (TYPE_SIZE (type) != 0
2246 && ! targetm.member_type_forces_blk (type, VOIDmode)
2247 /* BLKmode elements force BLKmode aggregate;
2248 else extract/store fields may lose. */
2249 && (TYPE_MODE (TREE_TYPE (type)) != BLKmode
2250 || TYPE_NO_FORCE_BLK (TREE_TYPE (type))))
2252 SET_TYPE_MODE (type, mode_for_array (TREE_TYPE (type),
2253 TYPE_SIZE (type)));
2254 if (TYPE_MODE (type) != BLKmode
2255 && STRICT_ALIGNMENT && TYPE_ALIGN (type) < BIGGEST_ALIGNMENT
2256 && TYPE_ALIGN (type) < GET_MODE_ALIGNMENT (TYPE_MODE (type)))
2258 TYPE_NO_FORCE_BLK (type) = 1;
2259 SET_TYPE_MODE (type, BLKmode);
2262 /* When the element size is constant, check that it is at least as
2263 large as the element alignment. */
2264 if (TYPE_SIZE_UNIT (element)
2265 && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
2266 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
2267 TYPE_ALIGN_UNIT. */
2268 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element))
2269 && !integer_zerop (TYPE_SIZE_UNIT (element))
2270 && compare_tree_int (TYPE_SIZE_UNIT (element),
2271 TYPE_ALIGN_UNIT (element)) < 0)
2272 error ("alignment of array elements is greater than element size");
2273 break;
2276 case RECORD_TYPE:
2277 case UNION_TYPE:
2278 case QUAL_UNION_TYPE:
2280 tree field;
2281 record_layout_info rli;
2283 /* Initialize the layout information. */
2284 rli = start_record_layout (type);
2286 /* If this is a QUAL_UNION_TYPE, we want to process the fields
2287 in the reverse order in building the COND_EXPR that denotes
2288 its size. We reverse them again later. */
2289 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2290 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2292 /* Place all the fields. */
2293 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2294 place_field (rli, field);
2296 if (TREE_CODE (type) == QUAL_UNION_TYPE)
2297 TYPE_FIELDS (type) = nreverse (TYPE_FIELDS (type));
2299 /* Finish laying out the record. */
2300 finish_record_layout (rli, /*free_p=*/true);
2302 break;
2304 default:
2305 gcc_unreachable ();
2308 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
2309 records and unions, finish_record_layout already called this
2310 function. */
2311 if (TREE_CODE (type) != RECORD_TYPE
2312 && TREE_CODE (type) != UNION_TYPE
2313 && TREE_CODE (type) != QUAL_UNION_TYPE)
2314 finalize_type_size (type);
2316 /* We should never see alias sets on incomplete aggregates. And we
2317 should not call layout_type on not incomplete aggregates. */
2318 if (AGGREGATE_TYPE_P (type))
2319 gcc_assert (!TYPE_ALIAS_SET_KNOWN_P (type));
2322 /* Vector types need to re-check the target flags each time we report
2323 the machine mode. We need to do this because attribute target can
2324 change the result of vector_mode_supported_p and have_regs_of_mode
2325 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
2326 change on a per-function basis. */
2327 /* ??? Possibly a better solution is to run through all the types
2328 referenced by a function and re-compute the TYPE_MODE once, rather
2329 than make the TYPE_MODE macro call a function. */
2331 enum machine_mode
2332 vector_type_mode (const_tree t)
2334 enum machine_mode mode;
2336 gcc_assert (TREE_CODE (t) == VECTOR_TYPE);
2338 mode = t->type_common.mode;
2339 if (VECTOR_MODE_P (mode)
2340 && (!targetm.vector_mode_supported_p (mode)
2341 || !have_regs_of_mode[mode]))
2343 enum machine_mode innermode = TREE_TYPE (t)->type_common.mode;
2345 /* For integers, try mapping it to a same-sized scalar mode. */
2346 if (GET_MODE_CLASS (innermode) == MODE_INT)
2348 mode = mode_for_size (TYPE_VECTOR_SUBPARTS (t)
2349 * GET_MODE_BITSIZE (innermode), MODE_INT, 0);
2351 if (mode != VOIDmode && have_regs_of_mode[mode])
2352 return mode;
2355 return BLKmode;
2358 return mode;
2361 /* Create and return a type for signed integers of PRECISION bits. */
2363 tree
2364 make_signed_type (int precision)
2366 tree type = make_node (INTEGER_TYPE);
2368 TYPE_PRECISION (type) = precision;
2370 fixup_signed_type (type);
2371 return type;
2374 /* Create and return a type for unsigned integers of PRECISION bits. */
2376 tree
2377 make_unsigned_type (int precision)
2379 tree type = make_node (INTEGER_TYPE);
2381 TYPE_PRECISION (type) = precision;
2383 fixup_unsigned_type (type);
2384 return type;
2387 /* Create and return a type for fract of PRECISION bits, UNSIGNEDP,
2388 and SATP. */
2390 tree
2391 make_fract_type (int precision, int unsignedp, int satp)
2393 tree type = make_node (FIXED_POINT_TYPE);
2395 TYPE_PRECISION (type) = precision;
2397 if (satp)
2398 TYPE_SATURATING (type) = 1;
2400 /* Lay out the type: set its alignment, size, etc. */
2401 if (unsignedp)
2403 TYPE_UNSIGNED (type) = 1;
2404 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UFRACT, 0));
2406 else
2407 SET_TYPE_MODE (type, mode_for_size (precision, MODE_FRACT, 0));
2408 layout_type (type);
2410 return type;
2413 /* Create and return a type for accum of PRECISION bits, UNSIGNEDP,
2414 and SATP. */
2416 tree
2417 make_accum_type (int precision, int unsignedp, int satp)
2419 tree type = make_node (FIXED_POINT_TYPE);
2421 TYPE_PRECISION (type) = precision;
2423 if (satp)
2424 TYPE_SATURATING (type) = 1;
2426 /* Lay out the type: set its alignment, size, etc. */
2427 if (unsignedp)
2429 TYPE_UNSIGNED (type) = 1;
2430 SET_TYPE_MODE (type, mode_for_size (precision, MODE_UACCUM, 0));
2432 else
2433 SET_TYPE_MODE (type, mode_for_size (precision, MODE_ACCUM, 0));
2434 layout_type (type);
2436 return type;
2439 /* Initialize sizetypes so layout_type can use them. */
2441 void
2442 initialize_sizetypes (void)
2444 int precision, bprecision;
2446 /* Get sizetypes precision from the SIZE_TYPE target macro. */
2447 if (strcmp (SIZETYPE, "unsigned int") == 0)
2448 precision = INT_TYPE_SIZE;
2449 else if (strcmp (SIZETYPE, "long unsigned int") == 0)
2450 precision = LONG_TYPE_SIZE;
2451 else if (strcmp (SIZETYPE, "long long unsigned int") == 0)
2452 precision = LONG_LONG_TYPE_SIZE;
2453 else if (strcmp (SIZETYPE, "short unsigned int") == 0)
2454 precision = SHORT_TYPE_SIZE;
2455 else
2456 gcc_unreachable ();
2458 bprecision
2459 = MIN (precision + BITS_PER_UNIT_LOG + 1, MAX_FIXED_MODE_SIZE);
2460 bprecision
2461 = GET_MODE_PRECISION (smallest_mode_for_size (bprecision, MODE_INT));
2462 if (bprecision > HOST_BITS_PER_DOUBLE_INT)
2463 bprecision = HOST_BITS_PER_DOUBLE_INT;
2465 /* Create stubs for sizetype and bitsizetype so we can create constants. */
2466 sizetype = make_node (INTEGER_TYPE);
2467 TYPE_NAME (sizetype) = get_identifier ("sizetype");
2468 TYPE_PRECISION (sizetype) = precision;
2469 TYPE_UNSIGNED (sizetype) = 1;
2470 bitsizetype = make_node (INTEGER_TYPE);
2471 TYPE_NAME (bitsizetype) = get_identifier ("bitsizetype");
2472 TYPE_PRECISION (bitsizetype) = bprecision;
2473 TYPE_UNSIGNED (bitsizetype) = 1;
2475 /* Now layout both types manually. */
2476 SET_TYPE_MODE (sizetype, smallest_mode_for_size (precision, MODE_INT));
2477 TYPE_ALIGN (sizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (sizetype));
2478 TYPE_SIZE (sizetype) = bitsize_int (precision);
2479 TYPE_SIZE_UNIT (sizetype) = size_int (GET_MODE_SIZE (TYPE_MODE (sizetype)));
2480 set_min_and_max_values_for_integral_type (sizetype, precision,
2481 /*is_unsigned=*/true);
2483 SET_TYPE_MODE (bitsizetype, smallest_mode_for_size (bprecision, MODE_INT));
2484 TYPE_ALIGN (bitsizetype) = GET_MODE_ALIGNMENT (TYPE_MODE (bitsizetype));
2485 TYPE_SIZE (bitsizetype) = bitsize_int (bprecision);
2486 TYPE_SIZE_UNIT (bitsizetype)
2487 = size_int (GET_MODE_SIZE (TYPE_MODE (bitsizetype)));
2488 set_min_and_max_values_for_integral_type (bitsizetype, bprecision,
2489 /*is_unsigned=*/true);
2491 /* Create the signed variants of *sizetype. */
2492 ssizetype = make_signed_type (TYPE_PRECISION (sizetype));
2493 TYPE_NAME (ssizetype) = get_identifier ("ssizetype");
2494 sbitsizetype = make_signed_type (TYPE_PRECISION (bitsizetype));
2495 TYPE_NAME (sbitsizetype) = get_identifier ("sbitsizetype");
2498 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2499 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2500 for TYPE, based on the PRECISION and whether or not the TYPE
2501 IS_UNSIGNED. PRECISION need not correspond to a width supported
2502 natively by the hardware; for example, on a machine with 8-bit,
2503 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2504 61. */
2506 void
2507 set_min_and_max_values_for_integral_type (tree type,
2508 int precision,
2509 bool is_unsigned)
2511 tree min_value;
2512 tree max_value;
2514 /* For bitfields with zero width we end up creating integer types
2515 with zero precision. Don't assign any minimum/maximum values
2516 to those types, they don't have any valid value. */
2517 if (precision < 1)
2518 return;
2520 if (is_unsigned)
2522 min_value = build_int_cst (type, 0);
2523 max_value
2524 = build_int_cst_wide (type, precision - HOST_BITS_PER_WIDE_INT >= 0
2525 ? -1
2526 : ((HOST_WIDE_INT) 1 << precision) - 1,
2527 precision - HOST_BITS_PER_WIDE_INT > 0
2528 ? ((unsigned HOST_WIDE_INT) ~0
2529 >> (HOST_BITS_PER_WIDE_INT
2530 - (precision - HOST_BITS_PER_WIDE_INT)))
2531 : 0);
2533 else
2535 min_value
2536 = build_int_cst_wide (type,
2537 (precision - HOST_BITS_PER_WIDE_INT > 0
2539 : (HOST_WIDE_INT) (-1) << (precision - 1)),
2540 (((HOST_WIDE_INT) (-1)
2541 << (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2542 ? precision - HOST_BITS_PER_WIDE_INT - 1
2543 : 0))));
2544 max_value
2545 = build_int_cst_wide (type,
2546 (precision - HOST_BITS_PER_WIDE_INT > 0
2547 ? -1
2548 : (HOST_WIDE_INT)
2549 (((unsigned HOST_WIDE_INT) 1
2550 << (precision - 1)) - 1)),
2551 (precision - HOST_BITS_PER_WIDE_INT - 1 > 0
2552 ? (HOST_WIDE_INT)
2553 ((((unsigned HOST_WIDE_INT) 1
2554 << (precision - HOST_BITS_PER_WIDE_INT
2555 - 1))) - 1)
2556 : 0));
2559 TYPE_MIN_VALUE (type) = min_value;
2560 TYPE_MAX_VALUE (type) = max_value;
2563 /* Set the extreme values of TYPE based on its precision in bits,
2564 then lay it out. Used when make_signed_type won't do
2565 because the tree code is not INTEGER_TYPE.
2566 E.g. for Pascal, when the -fsigned-char option is given. */
2568 void
2569 fixup_signed_type (tree type)
2571 int precision = TYPE_PRECISION (type);
2573 /* We can not represent properly constants greater then
2574 HOST_BITS_PER_DOUBLE_INT, still we need the types
2575 as they are used by i386 vector extensions and friends. */
2576 if (precision > HOST_BITS_PER_DOUBLE_INT)
2577 precision = HOST_BITS_PER_DOUBLE_INT;
2579 set_min_and_max_values_for_integral_type (type, precision,
2580 /*is_unsigned=*/false);
2582 /* Lay out the type: set its alignment, size, etc. */
2583 layout_type (type);
2586 /* Set the extreme values of TYPE based on its precision in bits,
2587 then lay it out. This is used both in `make_unsigned_type'
2588 and for enumeral types. */
2590 void
2591 fixup_unsigned_type (tree type)
2593 int precision = TYPE_PRECISION (type);
2595 /* We can not represent properly constants greater then
2596 HOST_BITS_PER_DOUBLE_INT, still we need the types
2597 as they are used by i386 vector extensions and friends. */
2598 if (precision > HOST_BITS_PER_DOUBLE_INT)
2599 precision = HOST_BITS_PER_DOUBLE_INT;
2601 TYPE_UNSIGNED (type) = 1;
2603 set_min_and_max_values_for_integral_type (type, precision,
2604 /*is_unsigned=*/true);
2606 /* Lay out the type: set its alignment, size, etc. */
2607 layout_type (type);
2610 /* Construct an iterator for a bitfield that spans BITSIZE bits,
2611 starting at BITPOS.
2613 BITREGION_START is the bit position of the first bit in this
2614 sequence of bit fields. BITREGION_END is the last bit in this
2615 sequence. If these two fields are non-zero, we should restrict the
2616 memory access to that range. Otherwise, we are allowed to touch
2617 any adjacent non bit-fields.
2619 ALIGN is the alignment of the underlying object in bits.
2620 VOLATILEP says whether the bitfield is volatile. */
2622 bit_field_mode_iterator
2623 ::bit_field_mode_iterator (HOST_WIDE_INT bitsize, HOST_WIDE_INT bitpos,
2624 HOST_WIDE_INT bitregion_start,
2625 HOST_WIDE_INT bitregion_end,
2626 unsigned int align, bool volatilep)
2627 : m_mode (GET_CLASS_NARROWEST_MODE (MODE_INT)), m_bitsize (bitsize),
2628 m_bitpos (bitpos), m_bitregion_start (bitregion_start),
2629 m_bitregion_end (bitregion_end), m_align (align),
2630 m_volatilep (volatilep), m_count (0)
2632 if (!m_bitregion_end)
2634 /* We can assume that any aligned chunk of ALIGN bits that overlaps
2635 the bitfield is mapped and won't trap, provided that ALIGN isn't
2636 too large. The cap is the biggest required alignment for data,
2637 or at least the word size. And force one such chunk at least. */
2638 unsigned HOST_WIDE_INT units
2639 = MIN (align, MAX (BIGGEST_ALIGNMENT, BITS_PER_WORD));
2640 if (bitsize <= 0)
2641 bitsize = 1;
2642 m_bitregion_end = bitpos + bitsize + units - 1;
2643 m_bitregion_end -= m_bitregion_end % units + 1;
2647 /* Calls to this function return successively larger modes that can be used
2648 to represent the bitfield. Return true if another bitfield mode is
2649 available, storing it in *OUT_MODE if so. */
2651 bool
2652 bit_field_mode_iterator::next_mode (enum machine_mode *out_mode)
2654 for (; m_mode != VOIDmode; m_mode = GET_MODE_WIDER_MODE (m_mode))
2656 unsigned int unit = GET_MODE_BITSIZE (m_mode);
2658 /* Skip modes that don't have full precision. */
2659 if (unit != GET_MODE_PRECISION (m_mode))
2660 continue;
2662 /* Stop if the mode is too wide to handle efficiently. */
2663 if (unit > MAX_FIXED_MODE_SIZE)
2664 break;
2666 /* Don't deliver more than one multiword mode; the smallest one
2667 should be used. */
2668 if (m_count > 0 && unit > BITS_PER_WORD)
2669 break;
2671 /* Skip modes that are too small. */
2672 unsigned HOST_WIDE_INT substart = (unsigned HOST_WIDE_INT) m_bitpos % unit;
2673 unsigned HOST_WIDE_INT subend = substart + m_bitsize;
2674 if (subend > unit)
2675 continue;
2677 /* Stop if the mode goes outside the bitregion. */
2678 HOST_WIDE_INT start = m_bitpos - substart;
2679 if (m_bitregion_start && start < m_bitregion_start)
2680 break;
2681 HOST_WIDE_INT end = start + unit;
2682 if (end > m_bitregion_end + 1)
2683 break;
2685 /* Stop if the mode requires too much alignment. */
2686 if (GET_MODE_ALIGNMENT (m_mode) > m_align
2687 && SLOW_UNALIGNED_ACCESS (m_mode, m_align))
2688 break;
2690 *out_mode = m_mode;
2691 m_mode = GET_MODE_WIDER_MODE (m_mode);
2692 m_count++;
2693 return true;
2695 return false;
2698 /* Return true if smaller modes are generally preferred for this kind
2699 of bitfield. */
2701 bool
2702 bit_field_mode_iterator::prefer_smaller_modes ()
2704 return (m_volatilep
2705 ? targetm.narrow_volatile_bitfield ()
2706 : !SLOW_BYTE_ACCESS);
2709 /* Find the best machine mode to use when referencing a bit field of length
2710 BITSIZE bits starting at BITPOS.
2712 BITREGION_START is the bit position of the first bit in this
2713 sequence of bit fields. BITREGION_END is the last bit in this
2714 sequence. If these two fields are non-zero, we should restrict the
2715 memory access to that range. Otherwise, we are allowed to touch
2716 any adjacent non bit-fields.
2718 The underlying object is known to be aligned to a boundary of ALIGN bits.
2719 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2720 larger than LARGEST_MODE (usually SImode).
2722 If no mode meets all these conditions, we return VOIDmode.
2724 If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the
2725 smallest mode meeting these conditions.
2727 If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the
2728 largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2729 all the conditions.
2731 If VOLATILEP is true the narrow_volatile_bitfields target hook is used to
2732 decide which of the above modes should be used. */
2734 enum machine_mode
2735 get_best_mode (int bitsize, int bitpos,
2736 unsigned HOST_WIDE_INT bitregion_start,
2737 unsigned HOST_WIDE_INT bitregion_end,
2738 unsigned int align,
2739 enum machine_mode largest_mode, bool volatilep)
2741 bit_field_mode_iterator iter (bitsize, bitpos, bitregion_start,
2742 bitregion_end, align, volatilep);
2743 enum machine_mode widest_mode = VOIDmode;
2744 enum machine_mode mode;
2745 while (iter.next_mode (&mode)
2746 /* ??? For historical reasons, reject modes that would normally
2747 receive greater alignment, even if unaligned accesses are
2748 acceptable. This has both advantages and disadvantages.
2749 Removing this check means that something like:
2751 struct s { unsigned int x; unsigned int y; };
2752 int f (struct s *s) { return s->x == 0 && s->y == 0; }
2754 can be implemented using a single load and compare on
2755 64-bit machines that have no alignment restrictions.
2756 For example, on powerpc64-linux-gnu, we would generate:
2758 ld 3,0(3)
2759 cntlzd 3,3
2760 srdi 3,3,6
2763 rather than:
2765 lwz 9,0(3)
2766 cmpwi 7,9,0
2767 bne 7,.L3
2768 lwz 3,4(3)
2769 cntlzw 3,3
2770 srwi 3,3,5
2771 extsw 3,3
2773 .p2align 4,,15
2774 .L3:
2775 li 3,0
2778 However, accessing more than one field can make life harder
2779 for the gimple optimizers. For example, gcc.dg/vect/bb-slp-5.c
2780 has a series of unsigned short copies followed by a series of
2781 unsigned short comparisons. With this check, both the copies
2782 and comparisons remain 16-bit accesses and FRE is able
2783 to eliminate the latter. Without the check, the comparisons
2784 can be done using 2 64-bit operations, which FRE isn't able
2785 to handle in the same way.
2787 Either way, it would probably be worth disabling this check
2788 during expand. One particular example where removing the
2789 check would help is the get_best_mode call in store_bit_field.
2790 If we are given a memory bitregion of 128 bits that is aligned
2791 to a 64-bit boundary, and the bitfield we want to modify is
2792 in the second half of the bitregion, this check causes
2793 store_bitfield to turn the memory into a 64-bit reference
2794 to the _first_ half of the region. We later use
2795 adjust_bitfield_address to get a reference to the correct half,
2796 but doing so looks to adjust_bitfield_address as though we are
2797 moving past the end of the original object, so it drops the
2798 associated MEM_EXPR and MEM_OFFSET. Removing the check
2799 causes store_bit_field to keep a 128-bit memory reference,
2800 so that the final bitfield reference still has a MEM_EXPR
2801 and MEM_OFFSET. */
2802 && GET_MODE_ALIGNMENT (mode) <= align
2803 && (largest_mode == VOIDmode
2804 || GET_MODE_SIZE (mode) <= GET_MODE_SIZE (largest_mode)))
2806 widest_mode = mode;
2807 if (iter.prefer_smaller_modes ())
2808 break;
2810 return widest_mode;
2813 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2814 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2816 void
2817 get_mode_bounds (enum machine_mode mode, int sign,
2818 enum machine_mode target_mode,
2819 rtx *mmin, rtx *mmax)
2821 unsigned size = GET_MODE_BITSIZE (mode);
2822 unsigned HOST_WIDE_INT min_val, max_val;
2824 gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
2826 if (sign)
2828 min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));
2829 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1;
2831 else
2833 min_val = 0;
2834 max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1) << 1) - 1;
2837 *mmin = gen_int_mode (min_val, target_mode);
2838 *mmax = gen_int_mode (max_val, target_mode);
2841 #include "gt-stor-layout.h"