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