ggc-page.c: Include cfgloop.h.
2009-10-20 Richard Guenther <rguenther@suse.de> * ggc-page.c: Include cfgloop.h. (struct max_alignment): Drop long double, add void *. (extra_order_size_table): Add low non-power-of-two multiples of MAX_ALIGNMENT. Drop small type-based entries, add tree_type, cgraph_node and loop. * alloc-pool.c (struct allocation_object_def): Drop long double aligning element. From-SVN: r153014
This commit is contained in:
parent
8345c8e427
commit
b78cd8859a
|
@ -1,3 +1,13 @@
|
|||
2009-10-20 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* ggc-page.c: Include cfgloop.h.
|
||||
(struct max_alignment): Drop long double, add void *.
|
||||
(extra_order_size_table): Add low non-power-of-two multiples
|
||||
of MAX_ALIGNMENT. Drop small type-based entries, add
|
||||
tree_type, cgraph_node and loop.
|
||||
* alloc-pool.c (struct allocation_object_def): Drop long double
|
||||
aligning element.
|
||||
|
||||
2009-10-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/41340
|
||||
|
|
|
@ -41,10 +41,10 @@ typedef struct allocation_object_def
|
|||
|
||||
/* Because we want any type of data to be well aligned after the ID,
|
||||
the following elements are here. They are never accessed so
|
||||
the allocated object may be even smaller than this structure. */
|
||||
the allocated object may be even smaller than this structure.
|
||||
We do not care about alignment for floating-point types. */
|
||||
char *align_p;
|
||||
HOST_WIDEST_INT align_i;
|
||||
long double align_ld;
|
||||
} u;
|
||||
} allocation_object;
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "timevar.h"
|
||||
#include "params.h"
|
||||
#include "tree-flow.h"
|
||||
#include "cfgloop.h"
|
||||
#include "plugin.h"
|
||||
|
||||
/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
|
||||
|
@ -157,6 +158,24 @@ along with GCC; see the file COPYING3. If not see
|
|||
#define OFFSET_TO_BIT(OFFSET, ORDER) \
|
||||
(((OFFSET) * DIV_MULT (ORDER)) >> DIV_SHIFT (ORDER))
|
||||
|
||||
/* We use this structure to determine the alignment required for
|
||||
allocations. For power-of-two sized allocations, that's not a
|
||||
problem, but it does matter for odd-sized allocations.
|
||||
We do not care about alignment for floating-point types. */
|
||||
|
||||
struct max_alignment {
|
||||
char c;
|
||||
union {
|
||||
HOST_WIDEST_INT i;
|
||||
void *p;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* The biggest alignment required. */
|
||||
|
||||
#define MAX_ALIGNMENT (offsetof (struct max_alignment, u))
|
||||
|
||||
|
||||
/* The number of extra orders, not corresponding to power-of-two sized
|
||||
objects. */
|
||||
|
||||
|
@ -173,42 +192,35 @@ along with GCC; see the file COPYING3. If not see
|
|||
thing you need to do to add a new special allocation size. */
|
||||
|
||||
static const size_t extra_order_size_table[] = {
|
||||
sizeof (struct var_ann_d),
|
||||
/* Extra orders for small non-power-of-two multiples of MAX_ALIGNMENT.
|
||||
There are a lot of structures with these sizes and explicitly
|
||||
listing them risks orders being dropped because they changed size. */
|
||||
MAX_ALIGNMENT * 3,
|
||||
MAX_ALIGNMENT * 5,
|
||||
MAX_ALIGNMENT * 6,
|
||||
MAX_ALIGNMENT * 7,
|
||||
MAX_ALIGNMENT * 9,
|
||||
MAX_ALIGNMENT * 10,
|
||||
MAX_ALIGNMENT * 11,
|
||||
MAX_ALIGNMENT * 12,
|
||||
MAX_ALIGNMENT * 13,
|
||||
MAX_ALIGNMENT * 14,
|
||||
MAX_ALIGNMENT * 15,
|
||||
sizeof (struct tree_decl_non_common),
|
||||
sizeof (struct tree_field_decl),
|
||||
sizeof (struct tree_parm_decl),
|
||||
sizeof (struct tree_var_decl),
|
||||
sizeof (struct tree_list),
|
||||
sizeof (struct tree_ssa_name),
|
||||
sizeof (struct tree_type),
|
||||
sizeof (struct function),
|
||||
sizeof (struct basic_block_def),
|
||||
sizeof (bitmap_element),
|
||||
sizeof (bitmap_head),
|
||||
TREE_EXP_SIZE (2),
|
||||
RTL_SIZE (2), /* MEM, PLUS, etc. */
|
||||
RTL_SIZE (9), /* INSN */
|
||||
sizeof (struct cgraph_node),
|
||||
sizeof (struct loop),
|
||||
};
|
||||
|
||||
/* The total number of orders. */
|
||||
|
||||
#define NUM_ORDERS (HOST_BITS_PER_PTR + NUM_EXTRA_ORDERS)
|
||||
|
||||
/* We use this structure to determine the alignment required for
|
||||
allocations. For power-of-two sized allocations, that's not a
|
||||
problem, but it does matter for odd-sized allocations. */
|
||||
|
||||
struct max_alignment {
|
||||
char c;
|
||||
union {
|
||||
HOST_WIDEST_INT i;
|
||||
long double d;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* The biggest alignment required. */
|
||||
|
||||
#define MAX_ALIGNMENT (offsetof (struct max_alignment, u))
|
||||
|
||||
/* Compute the smallest nonnegative number which when added to X gives
|
||||
a multiple of F. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue