OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [stor-layout.c] - Blame information for rev 867

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.