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