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
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
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/>. */
23 #include "coretypes.h"
31 #include "diagnostic-core.h"
34 #include "langhooks.h"
38 #include "tree-inline.h"
39 #include "tree-dump.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
,
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. */
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. */
78 variable_size (tree size
)
81 if (TREE_CONSTANT (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 ())
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. */
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
)
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
)
127 /* Default case: the component reference. */
128 else if (code
== COMPONENT_REF
)
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
)
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
)
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. */
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
;
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
)
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. */
182 if (walk_tree (&t
, copy_self_referential_tree_r
, NULL
, NULL
) != NULL_TREE
)
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
;
195 /* We shouldn't have true variables here. */
196 gcc_assert (TREE_READONLY (ref
));
199 /* This is the pattern built in ada/make_aligning_type. */
200 else if (TREE_CODE (ref
) == ADDR_EXPR
)
202 /* Default case: the component reference. */
204 subst
= TREE_OPERAND (ref
, 1);
206 sprintf (buf
, "p%d", i
);
207 param_name
= get_identifier (buf
);
208 param_type
= TREE_TYPE (ref
);
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
;
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
;
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. */
286 finalize_size_functions (void)
291 for (i
= 0; size_functions
&& size_functions
->iterate (i
, &fndecl
); i
++)
293 allocate_struct_function (fndecl
, false);
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. */
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
)
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
)
326 /* Similar, except passed a tree node. */
329 mode_for_size_tree (const_tree size
, enum mode_class mclass
, int limit
)
331 unsigned HOST_WIDE_INT uhwi
;
334 if (!host_integerp (size
, 1))
336 uhwi
= tree_low_cst (size
, 1);
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. */
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
353 for (mode
= GET_CLASS_NARROWEST_MODE (mclass
); mode
!= VOIDmode
;
354 mode
= GET_MODE_WIDER_MODE (mode
))
355 if (GET_MODE_PRECISION (mode
) >= size
)
361 /* Find an integer mode of the exact same size, or BLKmode on failure. */
364 int_mode_for_mode (enum machine_mode mode
)
366 switch (GET_MODE_CLASS (mode
))
369 case MODE_PARTIAL_INT
:
372 case MODE_COMPLEX_INT
:
373 case MODE_COMPLEX_FLOAT
:
375 case MODE_DECIMAL_FLOAT
:
376 case MODE_VECTOR_INT
:
377 case MODE_VECTOR_FLOAT
:
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);
393 /* ... fall through ... */
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. */
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
;
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
)
433 /* For integers, try mapping it to a same-sized scalar mode. */
435 && GET_MODE_CLASS (innermode
) == MODE_INT
)
436 mode
= mode_for_size (nunits
* GET_MODE_BITSIZE (innermode
),
440 || (GET_MODE_CLASS (mode
) == MODE_INT
441 && !have_regs_of_mode
[mode
]))
447 /* Return the alignment of MODE. This will be bounded by 1 and
448 BIGGEST_ALIGNMENT. */
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. */
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
)
475 unsigned HOST_WIDE_INT int_size
, int_elem_size
;
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
);
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
))
494 return mode_for_size_tree (size
, MODE_INT
, limit_p
);
497 /* Hook for a front-end function that tests to see if a declared
498 object's size needs to be calculated in a language defined way */
500 int (*lang_layout_decl_p
)(tree
, tree
) = 0;
503 set_lang_layout_decl_p (int (*f
)(tree
, tree
))
505 lang_layout_decl_p
= f
;
508 /* Hook for a front-end function that can size a declared
509 object, when the size is unknown at the time that
510 `layout_type' is called. */
512 void (*lang_layout_decl
) (tree
, tree
) = 0;
515 set_lang_layout_decl (void (*f
) (tree
, tree
))
517 lang_layout_decl
= f
;
520 /* Subroutine of layout_decl: Force alignment required for the data type.
521 But if the decl itself wants greater alignment, don't override that. */
524 do_type_align (tree type
, tree decl
)
526 if (TYPE_ALIGN (type
) > DECL_ALIGN (decl
))
528 DECL_ALIGN (decl
) = TYPE_ALIGN (type
);
529 if (TREE_CODE (decl
) == FIELD_DECL
)
530 DECL_USER_ALIGN (decl
) = TYPE_USER_ALIGN (type
);
534 /* Set the size, mode and alignment of a ..._DECL node.
535 TYPE_DECL does need this for C++.
536 Note that LABEL_DECL and CONST_DECL nodes do not need this,
537 and FUNCTION_DECL nodes have them set up in a special (and simple) way.
538 Don't call layout_decl for them.
540 KNOWN_ALIGN is the amount of alignment we can assume this
541 decl has with no special effort. It is relevant only for FIELD_DECLs
542 and depends on the previous fields.
543 All that matters about KNOWN_ALIGN is which powers of 2 divide it.
544 If KNOWN_ALIGN is 0, it means, "as much alignment as you like":
545 the record will be aligned to suit. */
548 layout_decl (tree decl
, unsigned int known_align
)
550 tree type
= TREE_TYPE (decl
);
551 enum tree_code code
= TREE_CODE (decl
);
553 location_t loc
= DECL_SOURCE_LOCATION (decl
);
555 if (code
== CONST_DECL
)
558 gcc_assert (code
== VAR_DECL
|| code
== PARM_DECL
|| code
== RESULT_DECL
559 || code
== TYPE_DECL
||code
== FIELD_DECL
);
561 rtl
= DECL_RTL_IF_SET (decl
);
563 if (type
== error_mark_node
)
564 type
= void_type_node
;
566 /* Usually the size and mode come from the data type without change,
567 however, the front-end may set the explicit width of the field, so its
568 size may not be the same as the size of its type. This happens with
569 bitfields, of course (an `int' bitfield may be only 2 bits, say), but it
570 also happens with other fields. For example, the C++ front-end creates
571 zero-sized fields corresponding to empty base classes, and depends on
572 layout_type setting DECL_FIELD_BITPOS correctly for the field. Set the
573 size in bytes from the size in bits. If we have already set the mode,
574 don't set it again since we can be called twice for FIELD_DECLs. */
576 DECL_UNSIGNED (decl
) = TYPE_UNSIGNED (type
);
577 if (DECL_MODE (decl
) == VOIDmode
)
578 DECL_MODE (decl
) = TYPE_MODE (type
);
580 if (lang_layout_decl_p
&& (*lang_layout_decl_p
) (decl
, type
))
582 (*lang_layout_decl
) (decl
, type
);
584 else if (DECL_SIZE (decl
) == 0)
586 DECL_SIZE (decl
) = TYPE_SIZE (type
);
587 DECL_SIZE_UNIT (decl
) = TYPE_SIZE_UNIT (type
);
589 else if (DECL_SIZE_UNIT (decl
) == 0)
590 DECL_SIZE_UNIT (decl
)
591 = fold_convert_loc (loc
, sizetype
,
592 size_binop_loc (loc
, CEIL_DIV_EXPR
, DECL_SIZE (decl
),
595 if (code
!= FIELD_DECL
)
596 /* For non-fields, update the alignment from the type. */
597 do_type_align (type
, decl
);
599 /* For fields, it's a bit more complicated... */
601 bool old_user_align
= DECL_USER_ALIGN (decl
);
602 bool zero_bitfield
= false;
603 bool packed_p
= DECL_PACKED (decl
);
606 if (DECL_BIT_FIELD (decl
))
608 DECL_BIT_FIELD_TYPE (decl
) = type
;
610 /* A zero-length bit-field affects the alignment of the next
611 field. In essence such bit-fields are not influenced by
612 any packing due to #pragma pack or attribute packed. */
613 if (integer_zerop (DECL_SIZE (decl
))
614 && ! targetm
.ms_bitfield_layout_p (DECL_FIELD_CONTEXT (decl
)))
616 zero_bitfield
= true;
618 #ifdef PCC_BITFIELD_TYPE_MATTERS
619 if (PCC_BITFIELD_TYPE_MATTERS
)
620 do_type_align (type
, decl
);
624 #ifdef EMPTY_FIELD_BOUNDARY
625 if (EMPTY_FIELD_BOUNDARY
> DECL_ALIGN (decl
))
627 DECL_ALIGN (decl
) = EMPTY_FIELD_BOUNDARY
;
628 DECL_USER_ALIGN (decl
) = 0;
634 /* See if we can use an ordinary integer mode for a bit-field.
635 Conditions are: a fixed size that is correct for another mode,
636 occupying a complete byte or bytes on proper boundary,
637 and not -fstrict-volatile-bitfields. If the latter is set,
638 we unfortunately can't check TREE_THIS_VOLATILE, as a cast
639 may make a volatile object later. */
640 if (TYPE_SIZE (type
) != 0
641 && TREE_CODE (TYPE_SIZE (type
)) == INTEGER_CST
642 && GET_MODE_CLASS (TYPE_MODE (type
)) == MODE_INT
643 && flag_strict_volatile_bitfields
<= 0)
645 enum machine_mode xmode
646 = mode_for_size_tree (DECL_SIZE (decl
), MODE_INT
, 1);
647 unsigned int xalign
= GET_MODE_ALIGNMENT (xmode
);
650 && !(xalign
> BITS_PER_UNIT
&& DECL_PACKED (decl
))
651 && (known_align
== 0 || known_align
>= xalign
))
653 DECL_ALIGN (decl
) = MAX (xalign
, DECL_ALIGN (decl
));
654 DECL_MODE (decl
) = xmode
;
655 DECL_BIT_FIELD (decl
) = 0;
659 /* Turn off DECL_BIT_FIELD if we won't need it set. */
660 if (TYPE_MODE (type
) == BLKmode
&& DECL_MODE (decl
) == BLKmode
661 && known_align
>= TYPE_ALIGN (type
)
662 && DECL_ALIGN (decl
) >= TYPE_ALIGN (type
))
663 DECL_BIT_FIELD (decl
) = 0;
665 else if (packed_p
&& DECL_USER_ALIGN (decl
))
666 /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
667 round up; we'll reduce it again below. We want packing to
668 supersede USER_ALIGN inherited from the type, but defer to
669 alignment explicitly specified on the field decl. */;
671 do_type_align (type
, decl
);
673 /* If the field is packed and not explicitly aligned, give it the
674 minimum alignment. Note that do_type_align may set
675 DECL_USER_ALIGN, so we need to check old_user_align instead. */
678 DECL_ALIGN (decl
) = MIN (DECL_ALIGN (decl
), BITS_PER_UNIT
);
680 if (! packed_p
&& ! DECL_USER_ALIGN (decl
))
682 /* Some targets (i.e. i386, VMS) limit struct field alignment
683 to a lower boundary than alignment of variables unless
684 it was overridden by attribute aligned. */
685 #ifdef BIGGEST_FIELD_ALIGNMENT
687 = MIN (DECL_ALIGN (decl
), (unsigned) BIGGEST_FIELD_ALIGNMENT
);
689 #ifdef ADJUST_FIELD_ALIGN
690 DECL_ALIGN (decl
) = ADJUST_FIELD_ALIGN (decl
, DECL_ALIGN (decl
));
695 mfa
= initial_max_fld_align
* BITS_PER_UNIT
;
697 mfa
= maximum_field_alignment
;
698 /* Should this be controlled by DECL_USER_ALIGN, too? */
700 DECL_ALIGN (decl
) = MIN (DECL_ALIGN (decl
), mfa
);
703 /* Evaluate nonconstant size only once, either now or as soon as safe. */
704 if (DECL_SIZE (decl
) != 0 && TREE_CODE (DECL_SIZE (decl
)) != INTEGER_CST
)
705 DECL_SIZE (decl
) = variable_size (DECL_SIZE (decl
));
706 if (DECL_SIZE_UNIT (decl
) != 0
707 && TREE_CODE (DECL_SIZE_UNIT (decl
)) != INTEGER_CST
)
708 DECL_SIZE_UNIT (decl
) = variable_size (DECL_SIZE_UNIT (decl
));
710 /* If requested, warn about definitions of large data objects. */
712 && (code
== VAR_DECL
|| code
== PARM_DECL
)
713 && ! DECL_EXTERNAL (decl
))
715 tree size
= DECL_SIZE_UNIT (decl
);
717 if (size
!= 0 && TREE_CODE (size
) == INTEGER_CST
718 && compare_tree_int (size
, larger_than_size
) > 0)
720 int size_as_int
= TREE_INT_CST_LOW (size
);
722 if (compare_tree_int (size
, size_as_int
) == 0)
723 warning (OPT_Wlarger_than_
, "size of %q+D is %d bytes", decl
, size_as_int
);
725 warning (OPT_Wlarger_than_
, "size of %q+D is larger than %wd bytes",
726 decl
, larger_than_size
);
730 /* If the RTL was already set, update its mode and mem attributes. */
733 PUT_MODE (rtl
, DECL_MODE (decl
));
734 SET_DECL_RTL (decl
, 0);
735 set_mem_attributes (rtl
, decl
, 1);
736 SET_DECL_RTL (decl
, rtl
);
740 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
741 a previous call to layout_decl and calls it again. */
744 relayout_decl (tree decl
)
746 DECL_SIZE (decl
) = DECL_SIZE_UNIT (decl
) = 0;
747 DECL_MODE (decl
) = VOIDmode
;
748 if (!DECL_USER_ALIGN (decl
))
749 DECL_ALIGN (decl
) = 0;
750 SET_DECL_RTL (decl
, 0);
752 layout_decl (decl
, 0);
755 /* Begin laying out type T, which may be a RECORD_TYPE, UNION_TYPE, or
756 QUAL_UNION_TYPE. Return a pointer to a struct record_layout_info which
757 is to be passed to all other layout functions for this record. It is the
758 responsibility of the caller to call `free' for the storage returned.
759 Note that garbage collection is not permitted until we finish laying
763 start_record_layout (tree t
)
765 record_layout_info rli
= XNEW (struct record_layout_info_s
);
769 /* If the type has a minimum specified alignment (via an attribute
770 declaration, for example) use it -- otherwise, start with a
771 one-byte alignment. */
772 rli
->record_align
= MAX (BITS_PER_UNIT
, TYPE_ALIGN (t
));
773 rli
->unpacked_align
= rli
->record_align
;
774 rli
->offset_align
= MAX (rli
->record_align
, BIGGEST_ALIGNMENT
);
776 #ifdef STRUCTURE_SIZE_BOUNDARY
777 /* Packed structures don't need to have minimum size. */
778 if (! TYPE_PACKED (t
))
782 /* #pragma pack overrides STRUCTURE_SIZE_BOUNDARY. */
783 tmp
= (unsigned) STRUCTURE_SIZE_BOUNDARY
;
784 if (maximum_field_alignment
!= 0)
785 tmp
= MIN (tmp
, maximum_field_alignment
);
786 rli
->record_align
= MAX (rli
->record_align
, tmp
);
790 rli
->offset
= size_zero_node
;
791 rli
->bitpos
= bitsize_zero_node
;
793 rli
->pending_statics
= 0;
794 rli
->packed_maybe_necessary
= 0;
795 rli
->remaining_in_alignment
= 0;
800 /* Return the combined bit position for the byte offset OFFSET and the
803 These functions operate on byte and bit positions present in FIELD_DECLs
804 and assume that these expressions result in no (intermediate) overflow.
805 This assumption is necessary to fold the expressions as much as possible,
806 so as to avoid creating artificially variable-sized types in languages
807 supporting variable-sized types like Ada. */
810 bit_from_pos (tree offset
, tree bitpos
)
812 if (TREE_CODE (offset
) == PLUS_EXPR
)
813 offset
= size_binop (PLUS_EXPR
,
814 fold_convert (bitsizetype
, TREE_OPERAND (offset
, 0)),
815 fold_convert (bitsizetype
, TREE_OPERAND (offset
, 1)));
817 offset
= fold_convert (bitsizetype
, offset
);
818 return size_binop (PLUS_EXPR
, bitpos
,
819 size_binop (MULT_EXPR
, offset
, bitsize_unit_node
));
822 /* Return the combined truncated byte position for the byte offset OFFSET and
823 the bit position BITPOS. */
826 byte_from_pos (tree offset
, tree bitpos
)
829 if (TREE_CODE (bitpos
) == MULT_EXPR
830 && tree_int_cst_equal (TREE_OPERAND (bitpos
, 1), bitsize_unit_node
))
831 bytepos
= TREE_OPERAND (bitpos
, 0);
833 bytepos
= size_binop (TRUNC_DIV_EXPR
, bitpos
, bitsize_unit_node
);
834 return size_binop (PLUS_EXPR
, offset
, fold_convert (sizetype
, bytepos
));
837 /* Split the bit position POS into a byte offset *POFFSET and a bit
838 position *PBITPOS with the byte offset aligned to OFF_ALIGN bits. */
841 pos_from_bit (tree
*poffset
, tree
*pbitpos
, unsigned int off_align
,
844 tree toff_align
= bitsize_int (off_align
);
845 if (TREE_CODE (pos
) == MULT_EXPR
846 && tree_int_cst_equal (TREE_OPERAND (pos
, 1), toff_align
))
848 *poffset
= size_binop (MULT_EXPR
,
849 fold_convert (sizetype
, TREE_OPERAND (pos
, 0)),
850 size_int (off_align
/ BITS_PER_UNIT
));
851 *pbitpos
= bitsize_zero_node
;
855 *poffset
= size_binop (MULT_EXPR
,
856 fold_convert (sizetype
,
857 size_binop (FLOOR_DIV_EXPR
, pos
,
859 size_int (off_align
/ BITS_PER_UNIT
));
860 *pbitpos
= size_binop (FLOOR_MOD_EXPR
, pos
, toff_align
);
864 /* Given a pointer to bit and byte offsets and an offset alignment,
865 normalize the offsets so they are within the alignment. */
868 normalize_offset (tree
*poffset
, tree
*pbitpos
, unsigned int off_align
)
870 /* If the bit position is now larger than it should be, adjust it
872 if (compare_tree_int (*pbitpos
, off_align
) >= 0)
875 pos_from_bit (&offset
, &bitpos
, off_align
, *pbitpos
);
876 *poffset
= size_binop (PLUS_EXPR
, *poffset
, offset
);
881 /* Print debugging information about the information in RLI. */
884 debug_rli (record_layout_info rli
)
886 print_node_brief (stderr
, "type", rli
->t
, 0);
887 print_node_brief (stderr
, "\noffset", rli
->offset
, 0);
888 print_node_brief (stderr
, " bitpos", rli
->bitpos
, 0);
890 fprintf (stderr
, "\naligns: rec = %u, unpack = %u, off = %u\n",
891 rli
->record_align
, rli
->unpacked_align
,
894 /* The ms_struct code is the only that uses this. */
895 if (targetm
.ms_bitfield_layout_p (rli
->t
))
896 fprintf (stderr
, "remaining in alignment = %u\n", rli
->remaining_in_alignment
);
898 if (rli
->packed_maybe_necessary
)
899 fprintf (stderr
, "packed may be necessary\n");
901 if (!vec_safe_is_empty (rli
->pending_statics
))
903 fprintf (stderr
, "pending statics:\n");
904 debug_vec_tree (rli
->pending_statics
);
908 /* Given an RLI with a possibly-incremented BITPOS, adjust OFFSET and
909 BITPOS if necessary to keep BITPOS below OFFSET_ALIGN. */
912 normalize_rli (record_layout_info rli
)
914 normalize_offset (&rli
->offset
, &rli
->bitpos
, rli
->offset_align
);
917 /* Returns the size in bytes allocated so far. */
920 rli_size_unit_so_far (record_layout_info rli
)
922 return byte_from_pos (rli
->offset
, rli
->bitpos
);
925 /* Returns the size in bits allocated so far. */
928 rli_size_so_far (record_layout_info rli
)
930 return bit_from_pos (rli
->offset
, rli
->bitpos
);
933 /* FIELD is about to be added to RLI->T. The alignment (in bits) of
934 the next available location within the record is given by KNOWN_ALIGN.
935 Update the variable alignment fields in RLI, and return the alignment
936 to give the FIELD. */
939 update_alignment_for_field (record_layout_info rli
, tree field
,
940 unsigned int known_align
)
942 /* The alignment required for FIELD. */
943 unsigned int desired_align
;
944 /* The type of this field. */
945 tree type
= TREE_TYPE (field
);
946 /* True if the field was explicitly aligned by the user. */
950 /* Do not attempt to align an ERROR_MARK node */
951 if (TREE_CODE (type
) == ERROR_MARK
)
954 /* Lay out the field so we know what alignment it needs. */
955 layout_decl (field
, known_align
);
956 desired_align
= DECL_ALIGN (field
);
957 user_align
= DECL_USER_ALIGN (field
);
959 is_bitfield
= (type
!= error_mark_node
960 && DECL_BIT_FIELD_TYPE (field
)
961 && ! integer_zerop (TYPE_SIZE (type
)));
963 /* Record must have at least as much alignment as any field.
964 Otherwise, the alignment of the field within the record is
966 if (targetm
.ms_bitfield_layout_p (rli
->t
))
968 /* Here, the alignment of the underlying type of a bitfield can
969 affect the alignment of a record; even a zero-sized field
970 can do this. The alignment should be to the alignment of
971 the type, except that for zero-size bitfields this only
972 applies if there was an immediately prior, nonzero-size
973 bitfield. (That's the way it is, experimentally.) */
974 if ((!is_bitfield
&& !DECL_PACKED (field
))
975 || ((DECL_SIZE (field
) == NULL_TREE
976 || !integer_zerop (DECL_SIZE (field
)))
977 ? !DECL_PACKED (field
)
979 && DECL_BIT_FIELD_TYPE (rli
->prev_field
)
980 && ! integer_zerop (DECL_SIZE (rli
->prev_field
)))))
982 unsigned int type_align
= TYPE_ALIGN (type
);
983 type_align
= MAX (type_align
, desired_align
);
984 if (maximum_field_alignment
!= 0)
985 type_align
= MIN (type_align
, maximum_field_alignment
);
986 rli
->record_align
= MAX (rli
->record_align
, type_align
);
987 rli
->unpacked_align
= MAX (rli
->unpacked_align
, TYPE_ALIGN (type
));
990 #ifdef PCC_BITFIELD_TYPE_MATTERS
991 else if (is_bitfield
&& PCC_BITFIELD_TYPE_MATTERS
)
993 /* Named bit-fields cause the entire structure to have the
994 alignment implied by their type. Some targets also apply the same
995 rules to unnamed bitfields. */
996 if (DECL_NAME (field
) != 0
997 || targetm
.align_anon_bitfield ())
999 unsigned int type_align
= TYPE_ALIGN (type
);
1001 #ifdef ADJUST_FIELD_ALIGN
1002 if (! TYPE_USER_ALIGN (type
))
1003 type_align
= ADJUST_FIELD_ALIGN (field
, type_align
);
1006 /* Targets might chose to handle unnamed and hence possibly
1007 zero-width bitfield. Those are not influenced by #pragmas
1008 or packed attributes. */
1009 if (integer_zerop (DECL_SIZE (field
)))
1011 if (initial_max_fld_align
)
1012 type_align
= MIN (type_align
,
1013 initial_max_fld_align
* BITS_PER_UNIT
);
1015 else if (maximum_field_alignment
!= 0)
1016 type_align
= MIN (type_align
, maximum_field_alignment
);
1017 else if (DECL_PACKED (field
))
1018 type_align
= MIN (type_align
, BITS_PER_UNIT
);
1020 /* The alignment of the record is increased to the maximum
1021 of the current alignment, the alignment indicated on the
1022 field (i.e., the alignment specified by an __aligned__
1023 attribute), and the alignment indicated by the type of
1025 rli
->record_align
= MAX (rli
->record_align
, desired_align
);
1026 rli
->record_align
= MAX (rli
->record_align
, type_align
);
1029 rli
->unpacked_align
= MAX (rli
->unpacked_align
, TYPE_ALIGN (type
));
1030 user_align
|= TYPE_USER_ALIGN (type
);
1036 rli
->record_align
= MAX (rli
->record_align
, desired_align
);
1037 rli
->unpacked_align
= MAX (rli
->unpacked_align
, TYPE_ALIGN (type
));
1040 TYPE_USER_ALIGN (rli
->t
) |= user_align
;
1042 return desired_align
;
1045 /* Called from place_field to handle unions. */
1048 place_union_field (record_layout_info rli
, tree field
)
1050 update_alignment_for_field (rli
, field
, /*known_align=*/0);
1052 DECL_FIELD_OFFSET (field
) = size_zero_node
;
1053 DECL_FIELD_BIT_OFFSET (field
) = bitsize_zero_node
;
1054 SET_DECL_OFFSET_ALIGN (field
, BIGGEST_ALIGNMENT
);
1056 /* If this is an ERROR_MARK return *after* having set the
1057 field at the start of the union. This helps when parsing
1059 if (TREE_CODE (TREE_TYPE (field
)) == ERROR_MARK
)
1062 /* We assume the union's size will be a multiple of a byte so we don't
1063 bother with BITPOS. */
1064 if (TREE_CODE (rli
->t
) == UNION_TYPE
)
1065 rli
->offset
= size_binop (MAX_EXPR
, rli
->offset
, DECL_SIZE_UNIT (field
));
1066 else if (TREE_CODE (rli
->t
) == QUAL_UNION_TYPE
)
1067 rli
->offset
= fold_build3 (COND_EXPR
, sizetype
, DECL_QUALIFIER (field
),
1068 DECL_SIZE_UNIT (field
), rli
->offset
);
1071 #if defined (PCC_BITFIELD_TYPE_MATTERS) || defined (BITFIELD_NBYTES_LIMITED)
1072 /* A bitfield of SIZE with a required access alignment of ALIGN is allocated
1073 at BYTE_OFFSET / BIT_OFFSET. Return nonzero if the field would span more
1074 units of alignment than the underlying TYPE. */
1076 excess_unit_span (HOST_WIDE_INT byte_offset
, HOST_WIDE_INT bit_offset
,
1077 HOST_WIDE_INT size
, HOST_WIDE_INT align
, tree type
)
1079 /* Note that the calculation of OFFSET might overflow; we calculate it so
1080 that we still get the right result as long as ALIGN is a power of two. */
1081 unsigned HOST_WIDE_INT offset
= byte_offset
* BITS_PER_UNIT
+ bit_offset
;
1083 offset
= offset
% align
;
1084 return ((offset
+ size
+ align
- 1) / align
1085 > ((unsigned HOST_WIDE_INT
) tree_low_cst (TYPE_SIZE (type
), 1)
1090 /* RLI contains information about the layout of a RECORD_TYPE. FIELD
1091 is a FIELD_DECL to be added after those fields already present in
1092 T. (FIELD is not actually added to the TYPE_FIELDS list here;
1093 callers that desire that behavior must manually perform that step.) */
1096 place_field (record_layout_info rli
, tree field
)
1098 /* The alignment required for FIELD. */
1099 unsigned int desired_align
;
1100 /* The alignment FIELD would have if we just dropped it into the
1101 record as it presently stands. */
1102 unsigned int known_align
;
1103 unsigned int actual_align
;
1104 /* The type of this field. */
1105 tree type
= TREE_TYPE (field
);
1107 gcc_assert (TREE_CODE (field
) != ERROR_MARK
);
1109 /* If FIELD is static, then treat it like a separate variable, not
1110 really like a structure field. If it is a FUNCTION_DECL, it's a
1111 method. In both cases, all we do is lay out the decl, and we do
1112 it *after* the record is laid out. */
1113 if (TREE_CODE (field
) == VAR_DECL
)
1115 vec_safe_push (rli
->pending_statics
, field
);
1119 /* Enumerators and enum types which are local to this class need not
1120 be laid out. Likewise for initialized constant fields. */
1121 else if (TREE_CODE (field
) != FIELD_DECL
)
1124 /* Unions are laid out very differently than records, so split
1125 that code off to another function. */
1126 else if (TREE_CODE (rli
->t
) != RECORD_TYPE
)
1128 place_union_field (rli
, field
);
1132 else if (TREE_CODE (type
) == ERROR_MARK
)
1134 /* Place this field at the current allocation position, so we
1135 maintain monotonicity. */
1136 DECL_FIELD_OFFSET (field
) = rli
->offset
;
1137 DECL_FIELD_BIT_OFFSET (field
) = rli
->bitpos
;
1138 SET_DECL_OFFSET_ALIGN (field
, rli
->offset_align
);
1142 /* Work out the known alignment so far. Note that A & (-A) is the
1143 value of the least-significant bit in A that is one. */
1144 if (! integer_zerop (rli
->bitpos
))
1145 known_align
= (tree_low_cst (rli
->bitpos
, 1)
1146 & - tree_low_cst (rli
->bitpos
, 1));
1147 else if (integer_zerop (rli
->offset
))
1149 else if (host_integerp (rli
->offset
, 1))
1150 known_align
= (BITS_PER_UNIT
1151 * (tree_low_cst (rli
->offset
, 1)
1152 & - tree_low_cst (rli
->offset
, 1)));
1154 known_align
= rli
->offset_align
;
1156 desired_align
= update_alignment_for_field (rli
, field
, known_align
);
1157 if (known_align
== 0)
1158 known_align
= MAX (BIGGEST_ALIGNMENT
, rli
->record_align
);
1160 if (warn_packed
&& DECL_PACKED (field
))
1162 if (known_align
>= TYPE_ALIGN (type
))
1164 if (TYPE_ALIGN (type
) > desired_align
)
1166 if (STRICT_ALIGNMENT
)
1167 warning (OPT_Wattributes
, "packed attribute causes "
1168 "inefficient alignment for %q+D", field
);
1169 /* Don't warn if DECL_PACKED was set by the type. */
1170 else if (!TYPE_PACKED (rli
->t
))
1171 warning (OPT_Wattributes
, "packed attribute is "
1172 "unnecessary for %q+D", field
);
1176 rli
->packed_maybe_necessary
= 1;
1179 /* Does this field automatically have alignment it needs by virtue
1180 of the fields that precede it and the record's own alignment? */
1181 if (known_align
< desired_align
)
1183 /* No, we need to skip space before this field.
1184 Bump the cumulative size to multiple of field alignment. */
1186 if (!targetm
.ms_bitfield_layout_p (rli
->t
)
1187 && DECL_SOURCE_LOCATION (field
) != BUILTINS_LOCATION
)
1188 warning (OPT_Wpadded
, "padding struct to align %q+D", field
);
1190 /* If the alignment is still within offset_align, just align
1191 the bit position. */
1192 if (desired_align
< rli
->offset_align
)
1193 rli
->bitpos
= round_up (rli
->bitpos
, desired_align
);
1196 /* First adjust OFFSET by the partial bits, then align. */
1198 = size_binop (PLUS_EXPR
, rli
->offset
,
1199 fold_convert (sizetype
,
1200 size_binop (CEIL_DIV_EXPR
, rli
->bitpos
,
1201 bitsize_unit_node
)));
1202 rli
->bitpos
= bitsize_zero_node
;
1204 rli
->offset
= round_up (rli
->offset
, desired_align
/ BITS_PER_UNIT
);
1207 if (! TREE_CONSTANT (rli
->offset
))
1208 rli
->offset_align
= desired_align
;
1209 if (targetm
.ms_bitfield_layout_p (rli
->t
))
1210 rli
->prev_field
= NULL
;
1213 /* Handle compatibility with PCC. Note that if the record has any
1214 variable-sized fields, we need not worry about compatibility. */
1215 #ifdef PCC_BITFIELD_TYPE_MATTERS
1216 if (PCC_BITFIELD_TYPE_MATTERS
1217 && ! targetm
.ms_bitfield_layout_p (rli
->t
)
1218 && TREE_CODE (field
) == FIELD_DECL
1219 && type
!= error_mark_node
1220 && DECL_BIT_FIELD (field
)
1221 && (! DECL_PACKED (field
)
1222 /* Enter for these packed fields only to issue a warning. */
1223 || TYPE_ALIGN (type
) <= BITS_PER_UNIT
)
1224 && maximum_field_alignment
== 0
1225 && ! integer_zerop (DECL_SIZE (field
))
1226 && host_integerp (DECL_SIZE (field
), 1)
1227 && host_integerp (rli
->offset
, 1)
1228 && host_integerp (TYPE_SIZE (type
), 1))
1230 unsigned int type_align
= TYPE_ALIGN (type
);
1231 tree dsize
= DECL_SIZE (field
);
1232 HOST_WIDE_INT field_size
= tree_low_cst (dsize
, 1);
1233 HOST_WIDE_INT offset
= tree_low_cst (rli
->offset
, 0);
1234 HOST_WIDE_INT bit_offset
= tree_low_cst (rli
->bitpos
, 0);
1236 #ifdef ADJUST_FIELD_ALIGN
1237 if (! TYPE_USER_ALIGN (type
))
1238 type_align
= ADJUST_FIELD_ALIGN (field
, type_align
);
1241 /* A bit field may not span more units of alignment of its type
1242 than its type itself. Advance to next boundary if necessary. */
1243 if (excess_unit_span (offset
, bit_offset
, field_size
, type_align
, type
))
1245 if (DECL_PACKED (field
))
1247 if (warn_packed_bitfield_compat
== 1)
1250 "offset of packed bit-field %qD has changed in GCC 4.4",
1254 rli
->bitpos
= round_up (rli
->bitpos
, type_align
);
1257 if (! DECL_PACKED (field
))
1258 TYPE_USER_ALIGN (rli
->t
) |= TYPE_USER_ALIGN (type
);
1262 #ifdef BITFIELD_NBYTES_LIMITED
1263 if (BITFIELD_NBYTES_LIMITED
1264 && ! targetm
.ms_bitfield_layout_p (rli
->t
)
1265 && TREE_CODE (field
) == FIELD_DECL
1266 && type
!= error_mark_node
1267 && DECL_BIT_FIELD_TYPE (field
)
1268 && ! DECL_PACKED (field
)
1269 && ! integer_zerop (DECL_SIZE (field
))
1270 && host_integerp (DECL_SIZE (field
), 1)
1271 && host_integerp (rli
->offset
, 1)
1272 && host_integerp (TYPE_SIZE (type
), 1))
1274 unsigned int type_align
= TYPE_ALIGN (type
);
1275 tree dsize
= DECL_SIZE (field
);
1276 HOST_WIDE_INT field_size
= tree_low_cst (dsize
, 1);
1277 HOST_WIDE_INT offset
= tree_low_cst (rli
->offset
, 0);
1278 HOST_WIDE_INT bit_offset
= tree_low_cst (rli
->bitpos
, 0);
1280 #ifdef ADJUST_FIELD_ALIGN
1281 if (! TYPE_USER_ALIGN (type
))
1282 type_align
= ADJUST_FIELD_ALIGN (field
, type_align
);
1285 if (maximum_field_alignment
!= 0)
1286 type_align
= MIN (type_align
, maximum_field_alignment
);
1287 /* ??? This test is opposite the test in the containing if
1288 statement, so this code is unreachable currently. */
1289 else if (DECL_PACKED (field
))
1290 type_align
= MIN (type_align
, BITS_PER_UNIT
);
1292 /* A bit field may not span the unit of alignment of its type.
1293 Advance to next boundary if necessary. */
1294 if (excess_unit_span (offset
, bit_offset
, field_size
, type_align
, type
))
1295 rli
->bitpos
= round_up (rli
->bitpos
, type_align
);
1297 TYPE_USER_ALIGN (rli
->t
) |= TYPE_USER_ALIGN (type
);
1301 /* See the docs for TARGET_MS_BITFIELD_LAYOUT_P for details.
1303 When a bit field is inserted into a packed record, the whole
1304 size of the underlying type is used by one or more same-size
1305 adjacent bitfields. (That is, if its long:3, 32 bits is
1306 used in the record, and any additional adjacent long bitfields are
1307 packed into the same chunk of 32 bits. However, if the size
1308 changes, a new field of that size is allocated.) In an unpacked
1309 record, this is the same as using alignment, but not equivalent
1312 Note: for compatibility, we use the type size, not the type alignment
1313 to determine alignment, since that matches the documentation */
1315 if (targetm
.ms_bitfield_layout_p (rli
->t
))
1317 tree prev_saved
= rli
->prev_field
;
1318 tree prev_type
= prev_saved
? DECL_BIT_FIELD_TYPE (prev_saved
) : NULL
;
1320 /* This is a bitfield if it exists. */
1321 if (rli
->prev_field
)
1323 /* If both are bitfields, nonzero, and the same size, this is
1324 the middle of a run. Zero declared size fields are special
1325 and handled as "end of run". (Note: it's nonzero declared
1326 size, but equal type sizes!) (Since we know that both
1327 the current and previous fields are bitfields by the
1328 time we check it, DECL_SIZE must be present for both.) */
1329 if (DECL_BIT_FIELD_TYPE (field
)
1330 && !integer_zerop (DECL_SIZE (field
))
1331 && !integer_zerop (DECL_SIZE (rli
->prev_field
))
1332 && host_integerp (DECL_SIZE (rli
->prev_field
), 0)
1333 && host_integerp (TYPE_SIZE (type
), 0)
1334 && simple_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (prev_type
)))
1336 /* We're in the middle of a run of equal type size fields; make
1337 sure we realign if we run out of bits. (Not decl size,
1339 HOST_WIDE_INT bitsize
= tree_low_cst (DECL_SIZE (field
), 1);
1341 if (rli
->remaining_in_alignment
< bitsize
)
1343 HOST_WIDE_INT typesize
= tree_low_cst (TYPE_SIZE (type
), 1);
1345 /* out of bits; bump up to next 'word'. */
1347 = size_binop (PLUS_EXPR
, rli
->bitpos
,
1348 bitsize_int (rli
->remaining_in_alignment
));
1349 rli
->prev_field
= field
;
1350 if (typesize
< bitsize
)
1351 rli
->remaining_in_alignment
= 0;
1353 rli
->remaining_in_alignment
= typesize
- bitsize
;
1356 rli
->remaining_in_alignment
-= bitsize
;
1360 /* End of a run: if leaving a run of bitfields of the same type
1361 size, we have to "use up" the rest of the bits of the type
1364 Compute the new position as the sum of the size for the prior
1365 type and where we first started working on that type.
1366 Note: since the beginning of the field was aligned then
1367 of course the end will be too. No round needed. */
1369 if (!integer_zerop (DECL_SIZE (rli
->prev_field
)))
1372 = size_binop (PLUS_EXPR
, rli
->bitpos
,
1373 bitsize_int (rli
->remaining_in_alignment
));
1376 /* We "use up" size zero fields; the code below should behave
1377 as if the prior field was not a bitfield. */
1380 /* Cause a new bitfield to be captured, either this time (if
1381 currently a bitfield) or next time we see one. */
1382 if (!DECL_BIT_FIELD_TYPE(field
)
1383 || integer_zerop (DECL_SIZE (field
)))
1384 rli
->prev_field
= NULL
;
1387 normalize_rli (rli
);
1390 /* If we're starting a new run of same type size bitfields
1391 (or a run of non-bitfields), set up the "first of the run"
1394 That is, if the current field is not a bitfield, or if there
1395 was a prior bitfield the type sizes differ, or if there wasn't
1396 a prior bitfield the size of the current field is nonzero.
1398 Note: we must be sure to test ONLY the type size if there was
1399 a prior bitfield and ONLY for the current field being zero if
1402 if (!DECL_BIT_FIELD_TYPE (field
)
1403 || (prev_saved
!= NULL
1404 ? !simple_cst_equal (TYPE_SIZE (type
), TYPE_SIZE (prev_type
))
1405 : !integer_zerop (DECL_SIZE (field
)) ))
1407 /* Never smaller than a byte for compatibility. */
1408 unsigned int type_align
= BITS_PER_UNIT
;
1410 /* (When not a bitfield), we could be seeing a flex array (with
1411 no DECL_SIZE). Since we won't be using remaining_in_alignment
1412 until we see a bitfield (and come by here again) we just skip
1414 if (DECL_SIZE (field
) != NULL
1415 && host_integerp (TYPE_SIZE (TREE_TYPE (field
)), 1)
1416 && host_integerp (DECL_SIZE (field
), 1))
1418 unsigned HOST_WIDE_INT bitsize
1419 = tree_low_cst (DECL_SIZE (field
), 1);
1420 unsigned HOST_WIDE_INT typesize
1421 = tree_low_cst (TYPE_SIZE (TREE_TYPE (field
)), 1);
1423 if (typesize
< bitsize
)
1424 rli
->remaining_in_alignment
= 0;
1426 rli
->remaining_in_alignment
= typesize
- bitsize
;
1429 /* Now align (conventionally) for the new type. */
1430 type_align
= TYPE_ALIGN (TREE_TYPE (field
));
1432 if (maximum_field_alignment
!= 0)
1433 type_align
= MIN (type_align
, maximum_field_alignment
);
1435 rli
->bitpos
= round_up (rli
->bitpos
, type_align
);
1437 /* If we really aligned, don't allow subsequent bitfields
1439 rli
->prev_field
= NULL
;
1443 /* Offset so far becomes the position of this field after normalizing. */
1444 normalize_rli (rli
);
1445 DECL_FIELD_OFFSET (field
) = rli
->offset
;
1446 DECL_FIELD_BIT_OFFSET (field
) = rli
->bitpos
;
1447 SET_DECL_OFFSET_ALIGN (field
, rli
->offset_align
);
1449 /* If this field ended up more aligned than we thought it would be (we
1450 approximate this by seeing if its position changed), lay out the field
1451 again; perhaps we can use an integral mode for it now. */
1452 if (! integer_zerop (DECL_FIELD_BIT_OFFSET (field
)))
1453 actual_align
= (tree_low_cst (DECL_FIELD_BIT_OFFSET (field
), 1)
1454 & - tree_low_cst (DECL_FIELD_BIT_OFFSET (field
), 1));
1455 else if (integer_zerop (DECL_FIELD_OFFSET (field
)))
1456 actual_align
= MAX (BIGGEST_ALIGNMENT
, rli
->record_align
);
1457 else if (host_integerp (DECL_FIELD_OFFSET (field
), 1))
1458 actual_align
= (BITS_PER_UNIT
1459 * (tree_low_cst (DECL_FIELD_OFFSET (field
), 1)
1460 & - tree_low_cst (DECL_FIELD_OFFSET (field
), 1)));
1462 actual_align
= DECL_OFFSET_ALIGN (field
);
1463 /* ACTUAL_ALIGN is still the actual alignment *within the record* .
1464 store / extract bit field operations will check the alignment of the
1465 record against the mode of bit fields. */
1467 if (known_align
!= actual_align
)
1468 layout_decl (field
, actual_align
);
1470 if (rli
->prev_field
== NULL
&& DECL_BIT_FIELD_TYPE (field
))
1471 rli
->prev_field
= field
;
1473 /* Now add size of this field to the size of the record. If the size is
1474 not constant, treat the field as being a multiple of bytes and just
1475 adjust the offset, resetting the bit position. Otherwise, apportion the
1476 size amongst the bit position and offset. First handle the case of an
1477 unspecified size, which can happen when we have an invalid nested struct
1478 definition, such as struct j { struct j { int i; } }. The error message
1479 is printed in finish_struct. */
1480 if (DECL_SIZE (field
) == 0)
1482 else if (TREE_CODE (DECL_SIZE (field
)) != INTEGER_CST
1483 || TREE_OVERFLOW (DECL_SIZE (field
)))
1486 = size_binop (PLUS_EXPR
, rli
->offset
,
1487 fold_convert (sizetype
,
1488 size_binop (CEIL_DIV_EXPR
, rli
->bitpos
,
1489 bitsize_unit_node
)));
1491 = size_binop (PLUS_EXPR
, rli
->offset
, DECL_SIZE_UNIT (field
));
1492 rli
->bitpos
= bitsize_zero_node
;
1493 rli
->offset_align
= MIN (rli
->offset_align
, desired_align
);
1495 else if (targetm
.ms_bitfield_layout_p (rli
->t
))
1497 rli
->bitpos
= size_binop (PLUS_EXPR
, rli
->bitpos
, DECL_SIZE (field
));
1499 /* If we ended a bitfield before the full length of the type then
1500 pad the struct out to the full length of the last type. */
1501 if ((DECL_CHAIN (field
) == NULL
1502 || TREE_CODE (DECL_CHAIN (field
)) != FIELD_DECL
)
1503 && DECL_BIT_FIELD_TYPE (field
)
1504 && !integer_zerop (DECL_SIZE (field
)))
1505 rli
->bitpos
= size_binop (PLUS_EXPR
, rli
->bitpos
,
1506 bitsize_int (rli
->remaining_in_alignment
));
1508 normalize_rli (rli
);
1512 rli
->bitpos
= size_binop (PLUS_EXPR
, rli
->bitpos
, DECL_SIZE (field
));
1513 normalize_rli (rli
);
1517 /* Assuming that all the fields have been laid out, this function uses
1518 RLI to compute the final TYPE_SIZE, TYPE_ALIGN, etc. for the type
1519 indicated by RLI. */
1522 finalize_record_size (record_layout_info rli
)
1524 tree unpadded_size
, unpadded_size_unit
;
1526 /* Now we want just byte and bit offsets, so set the offset alignment
1527 to be a byte and then normalize. */
1528 rli
->offset_align
= BITS_PER_UNIT
;
1529 normalize_rli (rli
);
1531 /* Determine the desired alignment. */
1532 #ifdef ROUND_TYPE_ALIGN
1533 TYPE_ALIGN (rli
->t
) = ROUND_TYPE_ALIGN (rli
->t
, TYPE_ALIGN (rli
->t
),
1536 TYPE_ALIGN (rli
->t
) = MAX (TYPE_ALIGN (rli
->t
), rli
->record_align
);
1539 /* Compute the size so far. Be sure to allow for extra bits in the
1540 size in bytes. We have guaranteed above that it will be no more
1541 than a single byte. */
1542 unpadded_size
= rli_size_so_far (rli
);
1543 unpadded_size_unit
= rli_size_unit_so_far (rli
);
1544 if (! integer_zerop (rli
->bitpos
))
1546 = size_binop (PLUS_EXPR
, unpadded_size_unit
, size_one_node
);
1548 /* Round the size up to be a multiple of the required alignment. */
1549 TYPE_SIZE (rli
->t
) = round_up (unpadded_size
, TYPE_ALIGN (rli
->t
));
1550 TYPE_SIZE_UNIT (rli
->t
)
1551 = round_up (unpadded_size_unit
, TYPE_ALIGN_UNIT (rli
->t
));
1553 if (TREE_CONSTANT (unpadded_size
)
1554 && simple_cst_equal (unpadded_size
, TYPE_SIZE (rli
->t
)) == 0
1555 && input_location
!= BUILTINS_LOCATION
)
1556 warning (OPT_Wpadded
, "padding struct size to alignment boundary");
1558 if (warn_packed
&& TREE_CODE (rli
->t
) == RECORD_TYPE
1559 && TYPE_PACKED (rli
->t
) && ! rli
->packed_maybe_necessary
1560 && TREE_CONSTANT (unpadded_size
))
1564 #ifdef ROUND_TYPE_ALIGN
1566 = ROUND_TYPE_ALIGN (rli
->t
, TYPE_ALIGN (rli
->t
), rli
->unpacked_align
);
1568 rli
->unpacked_align
= MAX (TYPE_ALIGN (rli
->t
), rli
->unpacked_align
);
1571 unpacked_size
= round_up (TYPE_SIZE (rli
->t
), rli
->unpacked_align
);
1572 if (simple_cst_equal (unpacked_size
, TYPE_SIZE (rli
->t
)))
1574 if (TYPE_NAME (rli
->t
))
1578 if (TREE_CODE (TYPE_NAME (rli
->t
)) == IDENTIFIER_NODE
)
1579 name
= TYPE_NAME (rli
->t
);
1581 name
= DECL_NAME (TYPE_NAME (rli
->t
));
1583 if (STRICT_ALIGNMENT
)
1584 warning (OPT_Wpacked
, "packed attribute causes inefficient "
1585 "alignment for %qE", name
);
1587 warning (OPT_Wpacked
,
1588 "packed attribute is unnecessary for %qE", name
);
1592 if (STRICT_ALIGNMENT
)
1593 warning (OPT_Wpacked
,
1594 "packed attribute causes inefficient alignment");
1596 warning (OPT_Wpacked
, "packed attribute is unnecessary");
1602 /* Compute the TYPE_MODE for the TYPE (which is a RECORD_TYPE). */
1605 compute_record_mode (tree type
)
1608 enum machine_mode mode
= VOIDmode
;
1610 /* Most RECORD_TYPEs have BLKmode, so we start off assuming that.
1611 However, if possible, we use a mode that fits in a register
1612 instead, in order to allow for better optimization down the
1614 SET_TYPE_MODE (type
, BLKmode
);
1616 if (! host_integerp (TYPE_SIZE (type
), 1))
1619 /* A record which has any BLKmode members must itself be
1620 BLKmode; it can't go in a register. Unless the member is
1621 BLKmode only because it isn't aligned. */
1622 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
1624 if (TREE_CODE (field
) != FIELD_DECL
)
1627 if (TREE_CODE (TREE_TYPE (field
)) == ERROR_MARK
1628 || (TYPE_MODE (TREE_TYPE (field
)) == BLKmode
1629 && ! TYPE_NO_FORCE_BLK (TREE_TYPE (field
))
1630 && !(TYPE_SIZE (TREE_TYPE (field
)) != 0
1631 && integer_zerop (TYPE_SIZE (TREE_TYPE (field
)))))
1632 || ! host_integerp (bit_position (field
), 1)
1633 || DECL_SIZE (field
) == 0
1634 || ! host_integerp (DECL_SIZE (field
), 1))
1637 /* If this field is the whole struct, remember its mode so
1638 that, say, we can put a double in a class into a DF
1639 register instead of forcing it to live in the stack. */
1640 if (simple_cst_equal (TYPE_SIZE (type
), DECL_SIZE (field
)))
1641 mode
= DECL_MODE (field
);
1643 /* With some targets, it is sub-optimal to access an aligned
1644 BLKmode structure as a scalar. */
1645 if (targetm
.member_type_forces_blk (field
, mode
))
1649 /* If we only have one real field; use its mode if that mode's size
1650 matches the type's size. This only applies to RECORD_TYPE. This
1651 does not apply to unions. */
1652 if (TREE_CODE (type
) == RECORD_TYPE
&& mode
!= VOIDmode
1653 && host_integerp (TYPE_SIZE (type
), 1)
1654 && GET_MODE_BITSIZE (mode
) == TREE_INT_CST_LOW (TYPE_SIZE (type
)))
1655 SET_TYPE_MODE (type
, mode
);
1657 SET_TYPE_MODE (type
, mode_for_size_tree (TYPE_SIZE (type
), MODE_INT
, 1));
1659 /* If structure's known alignment is less than what the scalar
1660 mode would need, and it matters, then stick with BLKmode. */
1661 if (TYPE_MODE (type
) != BLKmode
1663 && ! (TYPE_ALIGN (type
) >= BIGGEST_ALIGNMENT
1664 || TYPE_ALIGN (type
) >= GET_MODE_ALIGNMENT (TYPE_MODE (type
))))
1666 /* If this is the only reason this type is BLKmode, then
1667 don't force containing types to be BLKmode. */
1668 TYPE_NO_FORCE_BLK (type
) = 1;
1669 SET_TYPE_MODE (type
, BLKmode
);
1673 /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid
1677 finalize_type_size (tree type
)
1679 /* Normally, use the alignment corresponding to the mode chosen.
1680 However, where strict alignment is not required, avoid
1681 over-aligning structures, since most compilers do not do this
1684 if (TYPE_MODE (type
) != BLKmode
&& TYPE_MODE (type
) != VOIDmode
1685 && (STRICT_ALIGNMENT
1686 || (TREE_CODE (type
) != RECORD_TYPE
&& TREE_CODE (type
) != UNION_TYPE
1687 && TREE_CODE (type
) != QUAL_UNION_TYPE
1688 && TREE_CODE (type
) != ARRAY_TYPE
)))
1690 unsigned mode_align
= GET_MODE_ALIGNMENT (TYPE_MODE (type
));
1692 /* Don't override a larger alignment requirement coming from a user
1693 alignment of one of the fields. */
1694 if (mode_align
>= TYPE_ALIGN (type
))
1696 TYPE_ALIGN (type
) = mode_align
;
1697 TYPE_USER_ALIGN (type
) = 0;
1701 /* Do machine-dependent extra alignment. */
1702 #ifdef ROUND_TYPE_ALIGN
1704 = ROUND_TYPE_ALIGN (type
, TYPE_ALIGN (type
), BITS_PER_UNIT
);
1707 /* If we failed to find a simple way to calculate the unit size
1708 of the type, find it by division. */
1709 if (TYPE_SIZE_UNIT (type
) == 0 && TYPE_SIZE (type
) != 0)
1710 /* TYPE_SIZE (type) is computed in bitsizetype. After the division, the
1711 result will fit in sizetype. We will get more efficient code using
1712 sizetype, so we force a conversion. */
1713 TYPE_SIZE_UNIT (type
)
1714 = fold_convert (sizetype
,
1715 size_binop (FLOOR_DIV_EXPR
, TYPE_SIZE (type
),
1716 bitsize_unit_node
));
1718 if (TYPE_SIZE (type
) != 0)
1720 TYPE_SIZE (type
) = round_up (TYPE_SIZE (type
), TYPE_ALIGN (type
));
1721 TYPE_SIZE_UNIT (type
)
1722 = round_up (TYPE_SIZE_UNIT (type
), TYPE_ALIGN_UNIT (type
));
1725 /* Evaluate nonconstant sizes only once, either now or as soon as safe. */
1726 if (TYPE_SIZE (type
) != 0 && TREE_CODE (TYPE_SIZE (type
)) != INTEGER_CST
)
1727 TYPE_SIZE (type
) = variable_size (TYPE_SIZE (type
));
1728 if (TYPE_SIZE_UNIT (type
) != 0
1729 && TREE_CODE (TYPE_SIZE_UNIT (type
)) != INTEGER_CST
)
1730 TYPE_SIZE_UNIT (type
) = variable_size (TYPE_SIZE_UNIT (type
));
1732 /* Also layout any other variants of the type. */
1733 if (TYPE_NEXT_VARIANT (type
)
1734 || type
!= TYPE_MAIN_VARIANT (type
))
1737 /* Record layout info of this variant. */
1738 tree size
= TYPE_SIZE (type
);
1739 tree size_unit
= TYPE_SIZE_UNIT (type
);
1740 unsigned int align
= TYPE_ALIGN (type
);
1741 unsigned int user_align
= TYPE_USER_ALIGN (type
);
1742 enum machine_mode mode
= TYPE_MODE (type
);
1744 /* Copy it into all variants. */
1745 for (variant
= TYPE_MAIN_VARIANT (type
);
1747 variant
= TYPE_NEXT_VARIANT (variant
))
1749 TYPE_SIZE (variant
) = size
;
1750 TYPE_SIZE_UNIT (variant
) = size_unit
;
1751 TYPE_ALIGN (variant
) = align
;
1752 TYPE_USER_ALIGN (variant
) = user_align
;
1753 SET_TYPE_MODE (variant
, mode
);
1758 /* Return a new underlying object for a bitfield started with FIELD. */
1761 start_bitfield_representative (tree field
)
1763 tree repr
= make_node (FIELD_DECL
);
1764 DECL_FIELD_OFFSET (repr
) = DECL_FIELD_OFFSET (field
);
1765 /* Force the representative to begin at a BITS_PER_UNIT aligned
1766 boundary - C++ may use tail-padding of a base object to
1767 continue packing bits so the bitfield region does not start
1768 at bit zero (see g++.dg/abi/bitfield5.C for example).
1769 Unallocated bits may happen for other reasons as well,
1770 for example Ada which allows explicit bit-granular structure layout. */
1771 DECL_FIELD_BIT_OFFSET (repr
)
1772 = size_binop (BIT_AND_EXPR
,
1773 DECL_FIELD_BIT_OFFSET (field
),
1774 bitsize_int (~(BITS_PER_UNIT
- 1)));
1775 SET_DECL_OFFSET_ALIGN (repr
, DECL_OFFSET_ALIGN (field
));
1776 DECL_SIZE (repr
) = DECL_SIZE (field
);
1777 DECL_SIZE_UNIT (repr
) = DECL_SIZE_UNIT (field
);
1778 DECL_PACKED (repr
) = DECL_PACKED (field
);
1779 DECL_CONTEXT (repr
) = DECL_CONTEXT (field
);
1783 /* Finish up a bitfield group that was started by creating the underlying
1784 object REPR with the last field in the bitfield group FIELD. */
1787 finish_bitfield_representative (tree repr
, tree field
)
1789 unsigned HOST_WIDE_INT bitsize
, maxbitsize
;
1790 enum machine_mode mode
;
1793 size
= size_diffop (DECL_FIELD_OFFSET (field
),
1794 DECL_FIELD_OFFSET (repr
));
1795 gcc_assert (host_integerp (size
, 1));
1796 bitsize
= (tree_low_cst (size
, 1) * BITS_PER_UNIT
1797 + tree_low_cst (DECL_FIELD_BIT_OFFSET (field
), 1)
1798 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr
), 1)
1799 + tree_low_cst (DECL_SIZE (field
), 1));
1801 /* Round up bitsize to multiples of BITS_PER_UNIT. */
1802 bitsize
= (bitsize
+ BITS_PER_UNIT
- 1) & ~(BITS_PER_UNIT
- 1);
1804 /* Now nothing tells us how to pad out bitsize ... */
1805 nextf
= DECL_CHAIN (field
);
1806 while (nextf
&& TREE_CODE (nextf
) != FIELD_DECL
)
1807 nextf
= DECL_CHAIN (nextf
);
1811 /* If there was an error, the field may be not laid out
1812 correctly. Don't bother to do anything. */
1813 if (TREE_TYPE (nextf
) == error_mark_node
)
1815 maxsize
= size_diffop (DECL_FIELD_OFFSET (nextf
),
1816 DECL_FIELD_OFFSET (repr
));
1817 if (host_integerp (maxsize
, 1))
1819 maxbitsize
= (tree_low_cst (maxsize
, 1) * BITS_PER_UNIT
1820 + tree_low_cst (DECL_FIELD_BIT_OFFSET (nextf
), 1)
1821 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr
), 1));
1822 /* If the group ends within a bitfield nextf does not need to be
1823 aligned to BITS_PER_UNIT. Thus round up. */
1824 maxbitsize
= (maxbitsize
+ BITS_PER_UNIT
- 1) & ~(BITS_PER_UNIT
- 1);
1827 maxbitsize
= bitsize
;
1831 /* ??? If you consider that tail-padding of this struct might be
1832 re-used when deriving from it we cannot really do the following
1833 and thus need to set maxsize to bitsize? Also we cannot
1834 generally rely on maxsize to fold to an integer constant, so
1835 use bitsize as fallback for this case. */
1836 tree maxsize
= size_diffop (TYPE_SIZE_UNIT (DECL_CONTEXT (field
)),
1837 DECL_FIELD_OFFSET (repr
));
1838 if (host_integerp (maxsize
, 1))
1839 maxbitsize
= (tree_low_cst (maxsize
, 1) * BITS_PER_UNIT
1840 - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr
), 1));
1842 maxbitsize
= bitsize
;
1845 /* Only if we don't artificially break up the representative in
1846 the middle of a large bitfield with different possibly
1847 overlapping representatives. And all representatives start
1849 gcc_assert (maxbitsize
% BITS_PER_UNIT
== 0);
1851 /* Find the smallest nice mode to use. */
1852 for (mode
= GET_CLASS_NARROWEST_MODE (MODE_INT
); mode
!= VOIDmode
;
1853 mode
= GET_MODE_WIDER_MODE (mode
))
1854 if (GET_MODE_BITSIZE (mode
) >= bitsize
)
1856 if (mode
!= VOIDmode
1857 && (GET_MODE_BITSIZE (mode
) > maxbitsize
1858 || GET_MODE_BITSIZE (mode
) > MAX_FIXED_MODE_SIZE
))
1861 if (mode
== VOIDmode
)
1863 /* We really want a BLKmode representative only as a last resort,
1864 considering the member b in
1865 struct { int a : 7; int b : 17; int c; } __attribute__((packed));
1866 Otherwise we simply want to split the representative up
1867 allowing for overlaps within the bitfield region as required for
1868 struct { int a : 7; int b : 7;
1869 int c : 10; int d; } __attribute__((packed));
1870 [0, 15] HImode for a and b, [8, 23] HImode for c. */
1871 DECL_SIZE (repr
) = bitsize_int (bitsize
);
1872 DECL_SIZE_UNIT (repr
) = size_int (bitsize
/ BITS_PER_UNIT
);
1873 DECL_MODE (repr
) = BLKmode
;
1874 TREE_TYPE (repr
) = build_array_type_nelts (unsigned_char_type_node
,
1875 bitsize
/ BITS_PER_UNIT
);
1879 unsigned HOST_WIDE_INT modesize
= GET_MODE_BITSIZE (mode
);
1880 DECL_SIZE (repr
) = bitsize_int (modesize
);
1881 DECL_SIZE_UNIT (repr
) = size_int (modesize
/ BITS_PER_UNIT
);
1882 DECL_MODE (repr
) = mode
;
1883 TREE_TYPE (repr
) = lang_hooks
.types
.type_for_mode (mode
, 1);
1886 /* Remember whether the bitfield group is at the end of the
1887 structure or not. */
1888 DECL_CHAIN (repr
) = nextf
;
1891 /* Compute and set FIELD_DECLs for the underlying objects we should
1892 use for bitfield access for the structure laid out with RLI. */
1895 finish_bitfield_layout (record_layout_info rli
)
1898 tree repr
= NULL_TREE
;
1900 /* Unions would be special, for the ease of type-punning optimizations
1901 we could use the underlying type as hint for the representative
1902 if the bitfield would fit and the representative would not exceed
1903 the union in size. */
1904 if (TREE_CODE (rli
->t
) != RECORD_TYPE
)
1907 for (prev
= NULL_TREE
, field
= TYPE_FIELDS (rli
->t
);
1908 field
; field
= DECL_CHAIN (field
))
1910 if (TREE_CODE (field
) != FIELD_DECL
)
1913 /* In the C++ memory model, consecutive bit fields in a structure are
1914 considered one memory location and updating a memory location
1915 may not store into adjacent memory locations. */
1917 && DECL_BIT_FIELD_TYPE (field
))
1919 /* Start new representative. */
1920 repr
= start_bitfield_representative (field
);
1923 && ! DECL_BIT_FIELD_TYPE (field
))
1925 /* Finish off new representative. */
1926 finish_bitfield_representative (repr
, prev
);
1929 else if (DECL_BIT_FIELD_TYPE (field
))
1931 gcc_assert (repr
!= NULL_TREE
);
1933 /* Zero-size bitfields finish off a representative and
1934 do not have a representative themselves. This is
1935 required by the C++ memory model. */
1936 if (integer_zerop (DECL_SIZE (field
)))
1938 finish_bitfield_representative (repr
, prev
);
1942 /* We assume that either DECL_FIELD_OFFSET of the representative
1943 and each bitfield member is a constant or they are equal.
1944 This is because we need to be able to compute the bit-offset
1945 of each field relative to the representative in get_bit_range
1946 during RTL expansion.
1947 If these constraints are not met, simply force a new
1948 representative to be generated. That will at most
1949 generate worse code but still maintain correctness with
1950 respect to the C++ memory model. */
1951 else if (!((host_integerp (DECL_FIELD_OFFSET (repr
), 1)
1952 && host_integerp (DECL_FIELD_OFFSET (field
), 1))
1953 || operand_equal_p (DECL_FIELD_OFFSET (repr
),
1954 DECL_FIELD_OFFSET (field
), 0)))
1956 finish_bitfield_representative (repr
, prev
);
1957 repr
= start_bitfield_representative (field
);
1964 DECL_BIT_FIELD_REPRESENTATIVE (field
) = repr
;
1970 finish_bitfield_representative (repr
, prev
);
1973 /* Do all of the work required to layout the type indicated by RLI,
1974 once the fields have been laid out. This function will call `free'
1975 for RLI, unless FREE_P is false. Passing a value other than false
1976 for FREE_P is bad practice; this option only exists to support the
1980 finish_record_layout (record_layout_info rli
, int free_p
)
1984 /* Compute the final size. */
1985 finalize_record_size (rli
);
1987 /* Compute the TYPE_MODE for the record. */
1988 compute_record_mode (rli
->t
);
1990 /* Perform any last tweaks to the TYPE_SIZE, etc. */
1991 finalize_type_size (rli
->t
);
1993 /* Compute bitfield representatives. */
1994 finish_bitfield_layout (rli
);
1996 /* Propagate TYPE_PACKED to variants. With C++ templates,
1997 handle_packed_attribute is too early to do this. */
1998 for (variant
= TYPE_NEXT_VARIANT (rli
->t
); variant
;
1999 variant
= TYPE_NEXT_VARIANT (variant
))
2000 TYPE_PACKED (variant
) = TYPE_PACKED (rli
->t
);
2002 /* Lay out any static members. This is done now because their type
2003 may use the record's type. */
2004 while (!vec_safe_is_empty (rli
->pending_statics
))
2005 layout_decl (rli
->pending_statics
->pop (), 0);
2010 vec_free (rli
->pending_statics
);
2016 /* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
2017 NAME, its fields are chained in reverse on FIELDS.
2019 If ALIGN_TYPE is non-null, it is given the same alignment as
2023 finish_builtin_struct (tree type
, const char *name
, tree fields
,
2028 for (tail
= NULL_TREE
; fields
; tail
= fields
, fields
= next
)
2030 DECL_FIELD_CONTEXT (fields
) = type
;
2031 next
= DECL_CHAIN (fields
);
2032 DECL_CHAIN (fields
) = tail
;
2034 TYPE_FIELDS (type
) = tail
;
2038 TYPE_ALIGN (type
) = TYPE_ALIGN (align_type
);
2039 TYPE_USER_ALIGN (type
) = TYPE_USER_ALIGN (align_type
);
2043 #if 0 /* not yet, should get fixed properly later */
2044 TYPE_NAME (type
) = make_type_decl (get_identifier (name
), type
);
2046 TYPE_NAME (type
) = build_decl (BUILTINS_LOCATION
,
2047 TYPE_DECL
, get_identifier (name
), type
);
2049 TYPE_STUB_DECL (type
) = TYPE_NAME (type
);
2050 layout_decl (TYPE_NAME (type
), 0);
2053 /* Calculate the mode, size, and alignment for TYPE.
2054 For an array type, calculate the element separation as well.
2055 Record TYPE on the chain of permanent or temporary types
2056 so that dbxout will find out about it.
2058 TYPE_SIZE of a type is nonzero if the type has been laid out already.
2059 layout_type does nothing on such a type.
2061 If the type is incomplete, its TYPE_SIZE remains zero. */
2064 layout_type (tree type
)
2068 if (type
== error_mark_node
)
2071 /* Do nothing if type has been laid out before. */
2072 if (TYPE_SIZE (type
))
2075 switch (TREE_CODE (type
))
2078 /* This kind of type is the responsibility
2079 of the language-specific code. */
2082 case BOOLEAN_TYPE
: /* Used for Java, Pascal, and Chill. */
2083 if (TYPE_PRECISION (type
) == 0)
2084 TYPE_PRECISION (type
) = 1; /* default to one byte/boolean. */
2086 /* ... fall through ... */
2090 if (TREE_CODE (TYPE_MIN_VALUE (type
)) == INTEGER_CST
2091 && tree_int_cst_sgn (TYPE_MIN_VALUE (type
)) >= 0)
2092 TYPE_UNSIGNED (type
) = 1;
2094 SET_TYPE_MODE (type
,
2095 smallest_mode_for_size (TYPE_PRECISION (type
), MODE_INT
));
2096 TYPE_SIZE (type
) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type
)));
2097 TYPE_SIZE_UNIT (type
) = size_int (GET_MODE_SIZE (TYPE_MODE (type
)));
2101 SET_TYPE_MODE (type
,
2102 mode_for_size (TYPE_PRECISION (type
), MODE_FLOAT
, 0));
2103 TYPE_SIZE (type
) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type
)));
2104 TYPE_SIZE_UNIT (type
) = size_int (GET_MODE_SIZE (TYPE_MODE (type
)));
2107 case FIXED_POINT_TYPE
:
2108 /* TYPE_MODE (type) has been set already. */
2109 TYPE_SIZE (type
) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type
)));
2110 TYPE_SIZE_UNIT (type
) = size_int (GET_MODE_SIZE (TYPE_MODE (type
)));
2114 TYPE_UNSIGNED (type
) = TYPE_UNSIGNED (TREE_TYPE (type
));
2115 SET_TYPE_MODE (type
,
2116 mode_for_size (2 * TYPE_PRECISION (TREE_TYPE (type
)),
2117 (TREE_CODE (TREE_TYPE (type
)) == REAL_TYPE
2118 ? MODE_COMPLEX_FLOAT
: MODE_COMPLEX_INT
),
2120 TYPE_SIZE (type
) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type
)));
2121 TYPE_SIZE_UNIT (type
) = size_int (GET_MODE_SIZE (TYPE_MODE (type
)));
2126 int nunits
= TYPE_VECTOR_SUBPARTS (type
);
2127 tree innertype
= TREE_TYPE (type
);
2129 gcc_assert (!(nunits
& (nunits
- 1)));
2131 /* Find an appropriate mode for the vector type. */
2132 if (TYPE_MODE (type
) == VOIDmode
)
2133 SET_TYPE_MODE (type
,
2134 mode_for_vector (TYPE_MODE (innertype
), nunits
));
2136 TYPE_SATURATING (type
) = TYPE_SATURATING (TREE_TYPE (type
));
2137 TYPE_UNSIGNED (type
) = TYPE_UNSIGNED (TREE_TYPE (type
));
2138 TYPE_SIZE_UNIT (type
) = int_const_binop (MULT_EXPR
,
2139 TYPE_SIZE_UNIT (innertype
),
2141 TYPE_SIZE (type
) = int_const_binop (MULT_EXPR
, TYPE_SIZE (innertype
),
2142 bitsize_int (nunits
));
2144 /* For vector types, we do not default to the mode's alignment.
2145 Instead, query a target hook, defaulting to natural alignment.
2146 This prevents ABI changes depending on whether or not native
2147 vector modes are supported. */
2148 TYPE_ALIGN (type
) = targetm
.vector_alignment (type
);
2150 /* However, if the underlying mode requires a bigger alignment than
2151 what the target hook provides, we cannot use the mode. For now,
2152 simply reject that case. */
2153 gcc_assert (TYPE_ALIGN (type
)
2154 >= GET_MODE_ALIGNMENT (TYPE_MODE (type
)));
2159 /* This is an incomplete type and so doesn't have a size. */
2160 TYPE_ALIGN (type
) = 1;
2161 TYPE_USER_ALIGN (type
) = 0;
2162 SET_TYPE_MODE (type
, VOIDmode
);
2166 TYPE_SIZE (type
) = bitsize_int (POINTER_SIZE
);
2167 TYPE_SIZE_UNIT (type
) = size_int (POINTER_SIZE
/ BITS_PER_UNIT
);
2168 /* A pointer might be MODE_PARTIAL_INT,
2169 but ptrdiff_t must be integral. */
2170 SET_TYPE_MODE (type
, mode_for_size (POINTER_SIZE
, MODE_INT
, 0));
2171 TYPE_PRECISION (type
) = POINTER_SIZE
;
2176 /* It's hard to see what the mode and size of a function ought to
2177 be, but we do know the alignment is FUNCTION_BOUNDARY, so
2178 make it consistent with that. */
2179 SET_TYPE_MODE (type
, mode_for_size (FUNCTION_BOUNDARY
, MODE_INT
, 0));
2180 TYPE_SIZE (type
) = bitsize_int (FUNCTION_BOUNDARY
);
2181 TYPE_SIZE_UNIT (type
) = size_int (FUNCTION_BOUNDARY
/ BITS_PER_UNIT
);
2185 case REFERENCE_TYPE
:
2187 enum machine_mode mode
= TYPE_MODE (type
);
2188 if (TREE_CODE (type
) == REFERENCE_TYPE
&& reference_types_internal
)
2190 addr_space_t as
= TYPE_ADDR_SPACE (TREE_TYPE (type
));
2191 mode
= targetm
.addr_space
.address_mode (as
);
2194 TYPE_SIZE (type
) = bitsize_int (GET_MODE_BITSIZE (mode
));
2195 TYPE_SIZE_UNIT (type
) = size_int (GET_MODE_SIZE (mode
));
2196 TYPE_UNSIGNED (type
) = 1;
2197 TYPE_PRECISION (type
) = GET_MODE_BITSIZE (mode
);
2203 tree index
= TYPE_DOMAIN (type
);
2204 tree element
= TREE_TYPE (type
);
2206 build_pointer_type (element
);
2208 /* We need to know both bounds in order to compute the size. */
2209 if (index
&& TYPE_MAX_VALUE (index
) && TYPE_MIN_VALUE (index
)
2210 && TYPE_SIZE (element
))
2212 tree ub
= TYPE_MAX_VALUE (index
);
2213 tree lb
= TYPE_MIN_VALUE (index
);
2214 tree element_size
= TYPE_SIZE (element
);
2217 /* Make sure that an array of zero-sized element is zero-sized
2218 regardless of its extent. */
2219 if (integer_zerop (element_size
))
2220 length
= size_zero_node
;
2222 /* The computation should happen in the original signedness so
2223 that (possible) negative values are handled appropriately
2224 when determining overflow. */
2227 /* ??? When it is obvious that the range is signed
2228 represent it using ssizetype. */
2229 if (TREE_CODE (lb
) == INTEGER_CST
2230 && TREE_CODE (ub
) == INTEGER_CST
2231 && TYPE_UNSIGNED (TREE_TYPE (lb
))
2232 && tree_int_cst_lt (ub
, lb
))
2234 unsigned prec
= TYPE_PRECISION (TREE_TYPE (lb
));
2235 lb
= double_int_to_tree
2237 tree_to_double_int (lb
).sext (prec
));
2238 ub
= double_int_to_tree
2240 tree_to_double_int (ub
).sext (prec
));
2243 = fold_convert (sizetype
,
2244 size_binop (PLUS_EXPR
,
2245 build_int_cst (TREE_TYPE (lb
), 1),
2246 size_binop (MINUS_EXPR
, ub
, lb
)));
2249 /* ??? We have no way to distinguish a null-sized array from an
2250 array spanning the whole sizetype range, so we arbitrarily
2251 decide that [0, -1] is the only valid representation. */
2252 if (integer_zerop (length
)
2253 && TREE_OVERFLOW (length
)
2254 && integer_zerop (lb
))
2255 length
= size_zero_node
;
2257 TYPE_SIZE (type
) = size_binop (MULT_EXPR
, element_size
,
2258 fold_convert (bitsizetype
,
2261 /* If we know the size of the element, calculate the total size
2262 directly, rather than do some division thing below. This
2263 optimization helps Fortran assumed-size arrays (where the
2264 size of the array is determined at runtime) substantially. */
2265 if (TYPE_SIZE_UNIT (element
))
2266 TYPE_SIZE_UNIT (type
)
2267 = size_binop (MULT_EXPR
, TYPE_SIZE_UNIT (element
), length
);
2270 /* Now round the alignment and size,
2271 using machine-dependent criteria if any. */
2273 #ifdef ROUND_TYPE_ALIGN
2275 = ROUND_TYPE_ALIGN (type
, TYPE_ALIGN (element
), BITS_PER_UNIT
);
2277 TYPE_ALIGN (type
) = MAX (TYPE_ALIGN (element
), BITS_PER_UNIT
);
2279 TYPE_USER_ALIGN (type
) = TYPE_USER_ALIGN (element
);
2280 SET_TYPE_MODE (type
, BLKmode
);
2281 if (TYPE_SIZE (type
) != 0
2282 && ! targetm
.member_type_forces_blk (type
, VOIDmode
)
2283 /* BLKmode elements force BLKmode aggregate;
2284 else extract/store fields may lose. */
2285 && (TYPE_MODE (TREE_TYPE (type
)) != BLKmode
2286 || TYPE_NO_FORCE_BLK (TREE_TYPE (type
))))
2288 SET_TYPE_MODE (type
, mode_for_array (TREE_TYPE (type
),
2290 if (TYPE_MODE (type
) != BLKmode
2291 && STRICT_ALIGNMENT
&& TYPE_ALIGN (type
) < BIGGEST_ALIGNMENT
2292 && TYPE_ALIGN (type
) < GET_MODE_ALIGNMENT (TYPE_MODE (type
)))
2294 TYPE_NO_FORCE_BLK (type
) = 1;
2295 SET_TYPE_MODE (type
, BLKmode
);
2298 /* When the element size is constant, check that it is at least as
2299 large as the element alignment. */
2300 if (TYPE_SIZE_UNIT (element
)
2301 && TREE_CODE (TYPE_SIZE_UNIT (element
)) == INTEGER_CST
2302 /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
2304 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element
))
2305 && !integer_zerop (TYPE_SIZE_UNIT (element
))
2306 && compare_tree_int (TYPE_SIZE_UNIT (element
),
2307 TYPE_ALIGN_UNIT (element
)) < 0)
2308 error ("alignment of array elements is greater than element size");
2314 case QUAL_UNION_TYPE
:
2317 record_layout_info rli
;
2319 /* Initialize the layout information. */
2320 rli
= start_record_layout (type
);
2322 /* If this is a QUAL_UNION_TYPE, we want to process the fields
2323 in the reverse order in building the COND_EXPR that denotes
2324 its size. We reverse them again later. */
2325 if (TREE_CODE (type
) == QUAL_UNION_TYPE
)
2326 TYPE_FIELDS (type
) = nreverse (TYPE_FIELDS (type
));
2328 /* Place all the fields. */
2329 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
2330 place_field (rli
, field
);
2332 if (TREE_CODE (type
) == QUAL_UNION_TYPE
)
2333 TYPE_FIELDS (type
) = nreverse (TYPE_FIELDS (type
));
2335 /* Finish laying out the record. */
2336 finish_record_layout (rli
, /*free_p=*/true);
2344 /* Compute the final TYPE_SIZE, TYPE_ALIGN, etc. for TYPE. For
2345 records and unions, finish_record_layout already called this
2347 if (TREE_CODE (type
) != RECORD_TYPE
2348 && TREE_CODE (type
) != UNION_TYPE
2349 && TREE_CODE (type
) != QUAL_UNION_TYPE
)
2350 finalize_type_size (type
);
2352 /* We should never see alias sets on incomplete aggregates. And we
2353 should not call layout_type on not incomplete aggregates. */
2354 if (AGGREGATE_TYPE_P (type
))
2355 gcc_assert (!TYPE_ALIAS_SET_KNOWN_P (type
));
2358 /* Vector types need to re-check the target flags each time we report
2359 the machine mode. We need to do this because attribute target can
2360 change the result of vector_mode_supported_p and have_regs_of_mode
2361 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
2362 change on a per-function basis. */
2363 /* ??? Possibly a better solution is to run through all the types
2364 referenced by a function and re-compute the TYPE_MODE once, rather
2365 than make the TYPE_MODE macro call a function. */
2368 vector_type_mode (const_tree t
)
2370 enum machine_mode mode
;
2372 gcc_assert (TREE_CODE (t
) == VECTOR_TYPE
);
2374 mode
= t
->type_common
.mode
;
2375 if (VECTOR_MODE_P (mode
)
2376 && (!targetm
.vector_mode_supported_p (mode
)
2377 || !have_regs_of_mode
[mode
]))
2379 enum machine_mode innermode
= TREE_TYPE (t
)->type_common
.mode
;
2381 /* For integers, try mapping it to a same-sized scalar mode. */
2382 if (GET_MODE_CLASS (innermode
) == MODE_INT
)
2384 mode
= mode_for_size (TYPE_VECTOR_SUBPARTS (t
)
2385 * GET_MODE_BITSIZE (innermode
), MODE_INT
, 0);
2387 if (mode
!= VOIDmode
&& have_regs_of_mode
[mode
])
2397 /* Create and return a type for signed integers of PRECISION bits. */
2400 make_signed_type (int precision
)
2402 tree type
= make_node (INTEGER_TYPE
);
2404 TYPE_PRECISION (type
) = precision
;
2406 fixup_signed_type (type
);
2410 /* Create and return a type for unsigned integers of PRECISION bits. */
2413 make_unsigned_type (int precision
)
2415 tree type
= make_node (INTEGER_TYPE
);
2417 TYPE_PRECISION (type
) = precision
;
2419 fixup_unsigned_type (type
);
2423 /* Create and return a type for fract of PRECISION bits, UNSIGNEDP,
2427 make_fract_type (int precision
, int unsignedp
, int satp
)
2429 tree type
= make_node (FIXED_POINT_TYPE
);
2431 TYPE_PRECISION (type
) = precision
;
2434 TYPE_SATURATING (type
) = 1;
2436 /* Lay out the type: set its alignment, size, etc. */
2439 TYPE_UNSIGNED (type
) = 1;
2440 SET_TYPE_MODE (type
, mode_for_size (precision
, MODE_UFRACT
, 0));
2443 SET_TYPE_MODE (type
, mode_for_size (precision
, MODE_FRACT
, 0));
2449 /* Create and return a type for accum of PRECISION bits, UNSIGNEDP,
2453 make_accum_type (int precision
, int unsignedp
, int satp
)
2455 tree type
= make_node (FIXED_POINT_TYPE
);
2457 TYPE_PRECISION (type
) = precision
;
2460 TYPE_SATURATING (type
) = 1;
2462 /* Lay out the type: set its alignment, size, etc. */
2465 TYPE_UNSIGNED (type
) = 1;
2466 SET_TYPE_MODE (type
, mode_for_size (precision
, MODE_UACCUM
, 0));
2469 SET_TYPE_MODE (type
, mode_for_size (precision
, MODE_ACCUM
, 0));
2475 /* Initialize sizetypes so layout_type can use them. */
2478 initialize_sizetypes (void)
2480 int precision
, bprecision
;
2482 /* Get sizetypes precision from the SIZE_TYPE target macro. */
2483 if (strcmp (SIZETYPE
, "unsigned int") == 0)
2484 precision
= INT_TYPE_SIZE
;
2485 else if (strcmp (SIZETYPE
, "long unsigned int") == 0)
2486 precision
= LONG_TYPE_SIZE
;
2487 else if (strcmp (SIZETYPE
, "long long unsigned int") == 0)
2488 precision
= LONG_LONG_TYPE_SIZE
;
2489 else if (strcmp (SIZETYPE
, "short unsigned int") == 0)
2490 precision
= SHORT_TYPE_SIZE
;
2495 = MIN (precision
+ BITS_PER_UNIT_LOG
+ 1, MAX_FIXED_MODE_SIZE
);
2497 = GET_MODE_PRECISION (smallest_mode_for_size (bprecision
, MODE_INT
));
2498 if (bprecision
> HOST_BITS_PER_DOUBLE_INT
)
2499 bprecision
= HOST_BITS_PER_DOUBLE_INT
;
2501 /* Create stubs for sizetype and bitsizetype so we can create constants. */
2502 sizetype
= make_node (INTEGER_TYPE
);
2503 TYPE_NAME (sizetype
) = get_identifier ("sizetype");
2504 TYPE_PRECISION (sizetype
) = precision
;
2505 TYPE_UNSIGNED (sizetype
) = 1;
2506 bitsizetype
= make_node (INTEGER_TYPE
);
2507 TYPE_NAME (bitsizetype
) = get_identifier ("bitsizetype");
2508 TYPE_PRECISION (bitsizetype
) = bprecision
;
2509 TYPE_UNSIGNED (bitsizetype
) = 1;
2511 /* Now layout both types manually. */
2512 SET_TYPE_MODE (sizetype
, smallest_mode_for_size (precision
, MODE_INT
));
2513 TYPE_ALIGN (sizetype
) = GET_MODE_ALIGNMENT (TYPE_MODE (sizetype
));
2514 TYPE_SIZE (sizetype
) = bitsize_int (precision
);
2515 TYPE_SIZE_UNIT (sizetype
) = size_int (GET_MODE_SIZE (TYPE_MODE (sizetype
)));
2516 set_min_and_max_values_for_integral_type (sizetype
, precision
,
2517 /*is_unsigned=*/true);
2519 SET_TYPE_MODE (bitsizetype
, smallest_mode_for_size (bprecision
, MODE_INT
));
2520 TYPE_ALIGN (bitsizetype
) = GET_MODE_ALIGNMENT (TYPE_MODE (bitsizetype
));
2521 TYPE_SIZE (bitsizetype
) = bitsize_int (bprecision
);
2522 TYPE_SIZE_UNIT (bitsizetype
)
2523 = size_int (GET_MODE_SIZE (TYPE_MODE (bitsizetype
)));
2524 set_min_and_max_values_for_integral_type (bitsizetype
, bprecision
,
2525 /*is_unsigned=*/true);
2527 /* Create the signed variants of *sizetype. */
2528 ssizetype
= make_signed_type (TYPE_PRECISION (sizetype
));
2529 TYPE_NAME (ssizetype
) = get_identifier ("ssizetype");
2530 sbitsizetype
= make_signed_type (TYPE_PRECISION (bitsizetype
));
2531 TYPE_NAME (sbitsizetype
) = get_identifier ("sbitsizetype");
2534 /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE
2535 or BOOLEAN_TYPE. Set TYPE_MIN_VALUE and TYPE_MAX_VALUE
2536 for TYPE, based on the PRECISION and whether or not the TYPE
2537 IS_UNSIGNED. PRECISION need not correspond to a width supported
2538 natively by the hardware; for example, on a machine with 8-bit,
2539 16-bit, and 32-bit register modes, PRECISION might be 7, 23, or
2543 set_min_and_max_values_for_integral_type (tree type
,
2552 min_value
= build_int_cst (type
, 0);
2554 = build_int_cst_wide (type
, precision
- HOST_BITS_PER_WIDE_INT
>= 0
2556 : ((HOST_WIDE_INT
) 1 << precision
) - 1,
2557 precision
- HOST_BITS_PER_WIDE_INT
> 0
2558 ? ((unsigned HOST_WIDE_INT
) ~0
2559 >> (HOST_BITS_PER_WIDE_INT
2560 - (precision
- HOST_BITS_PER_WIDE_INT
)))
2566 = build_int_cst_wide (type
,
2567 (precision
- HOST_BITS_PER_WIDE_INT
> 0
2569 : (HOST_WIDE_INT
) (-1) << (precision
- 1)),
2570 (((HOST_WIDE_INT
) (-1)
2571 << (precision
- HOST_BITS_PER_WIDE_INT
- 1 > 0
2572 ? precision
- HOST_BITS_PER_WIDE_INT
- 1
2575 = build_int_cst_wide (type
,
2576 (precision
- HOST_BITS_PER_WIDE_INT
> 0
2579 (((unsigned HOST_WIDE_INT
) 1
2580 << (precision
- 1)) - 1)),
2581 (precision
- HOST_BITS_PER_WIDE_INT
- 1 > 0
2583 ((((unsigned HOST_WIDE_INT
) 1
2584 << (precision
- HOST_BITS_PER_WIDE_INT
2589 TYPE_MIN_VALUE (type
) = min_value
;
2590 TYPE_MAX_VALUE (type
) = max_value
;
2593 /* Set the extreme values of TYPE based on its precision in bits,
2594 then lay it out. Used when make_signed_type won't do
2595 because the tree code is not INTEGER_TYPE.
2596 E.g. for Pascal, when the -fsigned-char option is given. */
2599 fixup_signed_type (tree type
)
2601 int precision
= TYPE_PRECISION (type
);
2603 /* We can not represent properly constants greater then
2604 HOST_BITS_PER_DOUBLE_INT, still we need the types
2605 as they are used by i386 vector extensions and friends. */
2606 if (precision
> HOST_BITS_PER_DOUBLE_INT
)
2607 precision
= HOST_BITS_PER_DOUBLE_INT
;
2609 set_min_and_max_values_for_integral_type (type
, precision
,
2610 /*is_unsigned=*/false);
2612 /* Lay out the type: set its alignment, size, etc. */
2616 /* Set the extreme values of TYPE based on its precision in bits,
2617 then lay it out. This is used both in `make_unsigned_type'
2618 and for enumeral types. */
2621 fixup_unsigned_type (tree type
)
2623 int precision
= TYPE_PRECISION (type
);
2625 /* We can not represent properly constants greater then
2626 HOST_BITS_PER_DOUBLE_INT, still we need the types
2627 as they are used by i386 vector extensions and friends. */
2628 if (precision
> HOST_BITS_PER_DOUBLE_INT
)
2629 precision
= HOST_BITS_PER_DOUBLE_INT
;
2631 TYPE_UNSIGNED (type
) = 1;
2633 set_min_and_max_values_for_integral_type (type
, precision
,
2634 /*is_unsigned=*/true);
2636 /* Lay out the type: set its alignment, size, etc. */
2640 /* Construct an iterator for a bitfield that spans BITSIZE bits,
2643 BITREGION_START is the bit position of the first bit in this
2644 sequence of bit fields. BITREGION_END is the last bit in this
2645 sequence. If these two fields are non-zero, we should restrict the
2646 memory access to that range. Otherwise, we are allowed to touch
2647 any adjacent non bit-fields.
2649 ALIGN is the alignment of the underlying object in bits.
2650 VOLATILEP says whether the bitfield is volatile. */
2652 bit_field_mode_iterator
2653 ::bit_field_mode_iterator (HOST_WIDE_INT bitsize
, HOST_WIDE_INT bitpos
,
2654 HOST_WIDE_INT bitregion_start
,
2655 HOST_WIDE_INT bitregion_end
,
2656 unsigned int align
, bool volatilep
)
2657 : mode_ (GET_CLASS_NARROWEST_MODE (MODE_INT
)), bitsize_ (bitsize
),
2658 bitpos_ (bitpos
), bitregion_start_ (bitregion_start
),
2659 bitregion_end_ (bitregion_end
), align_ (align
),
2660 volatilep_ (volatilep
), count_ (0)
2662 if (!bitregion_end_
)
2664 /* We can assume that any aligned chunk of ALIGN bits that overlaps
2665 the bitfield is mapped and won't trap, provided that ALIGN isn't
2666 too large. The cap is the biggest required alignment for data,
2667 or at least the word size. And force one such chunk at least. */
2668 unsigned HOST_WIDE_INT units
2669 = MIN (align
, MAX (BIGGEST_ALIGNMENT
, BITS_PER_WORD
));
2672 bitregion_end_
= bitpos
+ bitsize
+ units
- 1;
2673 bitregion_end_
-= bitregion_end_
% units
+ 1;
2677 /* Calls to this function return successively larger modes that can be used
2678 to represent the bitfield. Return true if another bitfield mode is
2679 available, storing it in *OUT_MODE if so. */
2682 bit_field_mode_iterator::next_mode (enum machine_mode
*out_mode
)
2684 for (; mode_
!= VOIDmode
; mode_
= GET_MODE_WIDER_MODE (mode_
))
2686 unsigned int unit
= GET_MODE_BITSIZE (mode_
);
2688 /* Skip modes that don't have full precision. */
2689 if (unit
!= GET_MODE_PRECISION (mode_
))
2692 /* Stop if the mode is too wide to handle efficiently. */
2693 if (unit
> MAX_FIXED_MODE_SIZE
)
2696 /* Don't deliver more than one multiword mode; the smallest one
2698 if (count_
> 0 && unit
> BITS_PER_WORD
)
2701 /* Skip modes that are too small. */
2702 unsigned HOST_WIDE_INT substart
= (unsigned HOST_WIDE_INT
) bitpos_
% unit
;
2703 unsigned HOST_WIDE_INT subend
= substart
+ bitsize_
;
2707 /* Stop if the mode goes outside the bitregion. */
2708 HOST_WIDE_INT start
= bitpos_
- substart
;
2709 if (bitregion_start_
&& start
< bitregion_start_
)
2711 HOST_WIDE_INT end
= start
+ unit
;
2712 if (end
> bitregion_end_
+ 1)
2715 /* Stop if the mode requires too much alignment. */
2716 if (GET_MODE_ALIGNMENT (mode_
) > align_
2717 && SLOW_UNALIGNED_ACCESS (mode_
, align_
))
2721 mode_
= GET_MODE_WIDER_MODE (mode_
);
2728 /* Return true if smaller modes are generally preferred for this kind
2732 bit_field_mode_iterator::prefer_smaller_modes ()
2735 ? targetm
.narrow_volatile_bitfield ()
2736 : !SLOW_BYTE_ACCESS
);
2739 /* Find the best machine mode to use when referencing a bit field of length
2740 BITSIZE bits starting at BITPOS.
2742 BITREGION_START is the bit position of the first bit in this
2743 sequence of bit fields. BITREGION_END is the last bit in this
2744 sequence. If these two fields are non-zero, we should restrict the
2745 memory access to that range. Otherwise, we are allowed to touch
2746 any adjacent non bit-fields.
2748 The underlying object is known to be aligned to a boundary of ALIGN bits.
2749 If LARGEST_MODE is not VOIDmode, it means that we should not use a mode
2750 larger than LARGEST_MODE (usually SImode).
2752 If no mode meets all these conditions, we return VOIDmode.
2754 If VOLATILEP is false and SLOW_BYTE_ACCESS is false, we return the
2755 smallest mode meeting these conditions.
2757 If VOLATILEP is false and SLOW_BYTE_ACCESS is true, we return the
2758 largest mode (but a mode no wider than UNITS_PER_WORD) that meets
2761 If VOLATILEP is true the narrow_volatile_bitfields target hook is used to
2762 decide which of the above modes should be used. */
2765 get_best_mode (int bitsize
, int bitpos
,
2766 unsigned HOST_WIDE_INT bitregion_start
,
2767 unsigned HOST_WIDE_INT bitregion_end
,
2769 enum machine_mode largest_mode
, bool volatilep
)
2771 bit_field_mode_iterator
iter (bitsize
, bitpos
, bitregion_start
,
2772 bitregion_end
, align
, volatilep
);
2773 enum machine_mode widest_mode
= VOIDmode
;
2774 enum machine_mode mode
;
2775 while (iter
.next_mode (&mode
)
2776 /* ??? For historical reasons, reject modes that would normally
2777 receive greater alignment, even if unaligned accesses are
2778 acceptable. This has both advantages and disadvantages.
2779 Removing this check means that something like:
2781 struct s { unsigned int x; unsigned int y; };
2782 int f (struct s *s) { return s->x == 0 && s->y == 0; }
2784 can be implemented using a single load and compare on
2785 64-bit machines that have no alignment restrictions.
2786 For example, on powerpc64-linux-gnu, we would generate:
2808 However, accessing more than one field can make life harder
2809 for the gimple optimizers. For example, gcc.dg/vect/bb-slp-5.c
2810 has a series of unsigned short copies followed by a series of
2811 unsigned short comparisons. With this check, both the copies
2812 and comparisons remain 16-bit accesses and FRE is able
2813 to eliminate the latter. Without the check, the comparisons
2814 can be done using 2 64-bit operations, which FRE isn't able
2815 to handle in the same way.
2817 Either way, it would probably be worth disabling this check
2818 during expand. One particular example where removing the
2819 check would help is the get_best_mode call in store_bit_field.
2820 If we are given a memory bitregion of 128 bits that is aligned
2821 to a 64-bit boundary, and the bitfield we want to modify is
2822 in the second half of the bitregion, this check causes
2823 store_bitfield to turn the memory into a 64-bit reference
2824 to the _first_ half of the region. We later use
2825 adjust_bitfield_address to get a reference to the correct half,
2826 but doing so looks to adjust_bitfield_address as though we are
2827 moving past the end of the original object, so it drops the
2828 associated MEM_EXPR and MEM_OFFSET. Removing the check
2829 causes store_bit_field to keep a 128-bit memory reference,
2830 so that the final bitfield reference still has a MEM_EXPR
2832 && GET_MODE_ALIGNMENT (mode
) <= align
2833 && (largest_mode
== VOIDmode
2834 || GET_MODE_SIZE (mode
) <= GET_MODE_SIZE (largest_mode
)))
2837 if (iter
.prefer_smaller_modes ())
2843 /* Gets minimal and maximal values for MODE (signed or unsigned depending on
2844 SIGN). The returned constants are made to be usable in TARGET_MODE. */
2847 get_mode_bounds (enum machine_mode mode
, int sign
,
2848 enum machine_mode target_mode
,
2849 rtx
*mmin
, rtx
*mmax
)
2851 unsigned size
= GET_MODE_BITSIZE (mode
);
2852 unsigned HOST_WIDE_INT min_val
, max_val
;
2854 gcc_assert (size
<= HOST_BITS_PER_WIDE_INT
);
2858 min_val
= -((unsigned HOST_WIDE_INT
) 1 << (size
- 1));
2859 max_val
= ((unsigned HOST_WIDE_INT
) 1 << (size
- 1)) - 1;
2864 max_val
= ((unsigned HOST_WIDE_INT
) 1 << (size
- 1) << 1) - 1;
2867 *mmin
= gen_int_mode (min_val
, target_mode
);
2868 *mmax
= gen_int_mode (max_val
, target_mode
);
2871 #include "gt-stor-layout.h"