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