[PATCH] pack structures better on 64-bit hosts
Nathan Froyd
froydnj@codesourcery.com
Thu Apr 22 06:19:00 GMT 2010
The patch below is the result of spending quality time with pahole on an
x86-64 host. The changes suggested by pahole range from the
almost-useless (diagnostic-context.h) to the possibly-useful (df.h,
c-tree.h, cp-tree.h). I've attached the output from pahole (in emacs
org format) showing before/after formats for each affected structure so
the effects of the patch are somewhat more understandable.
No, I haven't measured the effect of these changes.
Bootstrapped on x86-64-linux-gnu. OK to commit?
-Nathan
gcc/
* basic-block.h (struct control_flow_graph): Move last_label_uid field up.
* c-parser.c (struct c_token): Move location field up.
* c-tree.h (struct c_typespec): Move expr_const_operands field up.
(struct c_declspecs): Convert typespec_word, storage_class, and
default_int_p into bitfields.
(struct c_declarator): Move loc field up.
* cfgloop.h (struct loop): Move can_be_parallel field up.
* df.h (struct df_base_ref): Move regno field up.
* diagnostic.h (struct diagnostic_context): Move classify_diagnostic
field down.
* dwarf2out.c (struct dw_fde_struct): Move funcdef_number field down.
* expr.h (struct separate_ops): Move location field up.
* ipa-prop.h (struct ipa_node_params): Move bitfields up.
* optabs.h (struct optab_d): Move libcall_basename field down.
* tree-ssa-loop-ivopts.c (struct version_info): Move inv_id field down.
(struct iv_cand): Convert pos field into a bitfield.
* tree-vectorizer.h (struct _loop_vec_info): Move loop_line_number field up.
(struct _stmt_vec_info): Shuffle fields for better packing.
* config/i386/i386.c (struct ix86_frame): Move red_zone_size up.
* config/i386/i386.h (struct machine_function): Convert call_abi field
into a bitfield. Move cfa field to the end of the structure.
gcc/cp/
* cp-tree.h (struct cp_decl_specifier_seq): Move type_location field up.
(struct cp_declarator): Move id_loc field up.
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 34b18bd..836c23e 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -389,6 +389,9 @@ struct GTY(()) control_flow_graph {
/* The first free basic block number. */
int x_last_basic_block;
+ /* UIDs for LABEL_DECLs. */
+ int last_label_uid;
+
/* Mapping of labels to their associated blocks. At present
only used for the gimple CFG. */
VEC(basic_block,gc) *x_label_to_block_map;
@@ -404,9 +407,6 @@ struct GTY(()) control_flow_graph {
/* Maximal number of entities in the single jumptable. Used to estimate
final flowgraph size. */
int max_jumptable_ents;
-
- /* UIDs for LABEL_DECLs. */
- int last_label_uid;
};
/* Defines for accessing the fields of the CFG structure for function FN. */
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index 27f0b81..62f1ea3 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -156,10 +156,10 @@ typedef struct GTY (()) c_token {
/* If this token is a CPP_PRAGMA, this indicates the pragma that
was seen. Otherwise it is PRAGMA_NONE. */
ENUM_BITFIELD (pragma_kind) pragma_kind : 8;
- /* The value associated with this token, if any. */
- tree value;
/* The location at which this token was found. */
location_t location;
+ /* The value associated with this token, if any. */
+ tree value;
} c_token;
/* A parser structure recording information about the state and
diff --git a/gcc/c-tree.h b/gcc/c-tree.h
index 3681ed7..882f545 100644
--- a/gcc/c-tree.h
+++ b/gcc/c-tree.h
@@ -160,6 +160,9 @@ enum c_typespec_kind {
struct c_typespec {
/* What kind of type specifier this is. */
enum c_typespec_kind kind;
+ /* Whether the expression has operands suitable for use in constant
+ expressions. */
+ bool expr_const_operands;
/* The specifier itself. */
tree spec;
/* An expression to be evaluated before the type specifier, in the
@@ -171,9 +174,6 @@ struct c_typespec {
expression itself (as opposed to the array sizes) forms no part
of the type and so needs to be recorded separately. */
tree expr;
- /* Whether the expression has operands suitable for use in constant
- expressions. */
- bool expr_const_operands;
};
/* A storage class specifier. */
@@ -220,11 +220,11 @@ struct c_declspecs {
NULL; attributes (possibly from multiple lists) will be passed
separately. */
tree attrs;
- /* Any type specifier keyword used such as "int", not reflecting
- modifiers such as "short", or cts_none if none. */
- enum c_typespec_keyword typespec_word;
/* The storage class specifier, or csc_none if none. */
enum c_storage_class storage_class;
+ /* Any type specifier keyword used such as "int", not reflecting
+ modifiers such as "short", or cts_none if none. */
+ ENUM_BITFIELD (c_typespec_keyword) typespec_word : 8;
/* Whether any expressions in typeof specifiers may appear in
constant expressions. */
BOOL_BITFIELD expr_const_operands : 1;
@@ -252,7 +252,7 @@ struct c_declspecs {
BOOL_BITFIELD deprecated_p : 1;
/* Whether the type defaulted to "int" because there were no type
specifiers. */
- BOOL_BITFIELD default_int_p;
+ BOOL_BITFIELD default_int_p : 1;
/* Whether "long" was specified. */
BOOL_BITFIELD long_p : 1;
/* Whether "long" was specified more than once. */
@@ -319,9 +319,9 @@ struct c_arg_info {
struct c_declarator {
/* The kind of declarator. */
enum c_declarator_kind kind;
+ location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
/* Except for cdk_id, the contained declarator. For cdk_id, NULL. */
struct c_declarator *declarator;
- location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
union {
/* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
declarator. */
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 26f9050..4135ed7 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -148,6 +148,9 @@ struct GTY ((chain_next ("%h.next"))) loop {
bool any_upper_bound;
bool any_estimate;
+ /* True if the loop can be parallel. */
+ bool can_be_parallel;
+
/* An integer estimation of the number of iterations. Estimate_state
describes what is the state of the estimation. */
enum loop_estimation estimate_state;
@@ -158,9 +161,6 @@ struct GTY ((chain_next ("%h.next"))) loop {
/* Head of the cyclic list of the exits of the loop. */
struct loop_exit *exits;
- /* True if the loop can be parallel. */
- bool can_be_parallel;
-
/* The single induction variable of the loop when the loop is in
normal form. */
tree single_iv;
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index f91410a..7b094dc 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1759,10 +1759,10 @@ struct ix86_frame
int nregs;
int padding1;
int va_arg_size;
+ int red_zone_size;
HOST_WIDE_INT frame;
int padding2;
int outgoing_arguments_size;
- int red_zone_size;
HOST_WIDE_INT to_allocate;
/* The offsets relative to ARG_POINTER. */
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 4b83370..4f564a1 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2364,12 +2364,9 @@ struct GTY(()) machine_function {
has been computed for. */
int use_fast_prologue_epilogue_nregs;
- /* The CFA state at the end of the prologue. */
- struct machine_cfa_state cfa;
-
/* This value is used for amd64 targets and specifies the current abi
to be used. MS_ABI means ms abi. Otherwise SYSV_ABI means sysv abi. */
- enum calling_abi call_abi;
+ ENUM_BITFIELD(calling_abi) call_abi : 8;
/* Nonzero if the function accesses a previous frame. */
BOOL_BITFIELD accesses_prev_frame : 1;
@@ -2395,6 +2392,9 @@ struct GTY(()) machine_function {
/* If true, the current function has a STATIC_CHAIN is placed on the
stack below the return address. */
BOOL_BITFIELD static_chain_on_stack : 1;
+
+ /* The CFA state at the end of the prologue. */
+ struct machine_cfa_state cfa;
};
#endif
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 22ee2d7..5981f2c 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -4363,14 +4363,14 @@ typedef enum cp_decl_spec {
typedef struct cp_decl_specifier_seq {
/* The number of times each of the keywords has been seen. */
unsigned specs[(int) ds_last];
+ /* The location of the primary type. Mainly used for error
+ reporting. */
+ location_t type_location;
/* The primary type, if any, given by the decl-specifier-seq.
Modifiers, like "short", "const", and "unsigned" are not
reflected here. This field will be a TYPE, unless a typedef-name
was used, in which case it will be a TYPE_DECL. */
tree type;
- /* The location of the primary type. Mainly used for error
- reporting. */
- location_t type_location;
/* The attributes, if any, provided with the specifier sequence. */
tree attributes;
/* If non-NULL, a built-in type that the user attempted to redefine
@@ -4438,12 +4438,12 @@ struct cp_declarator {
/* Whether we parsed an ellipsis (`...') just before the declarator,
to indicate this is a parameter pack. */
BOOL_BITFIELD parameter_pack_p : 1;
+ location_t id_loc; /* Currently only set for cdk_id and cdk_function. */
/* Attributes that apply to this declarator. */
tree attributes;
/* For all but cdk_id and cdk_error, the contained declarator. For
cdk_id and cdk_error, guaranteed to be NULL. */
cp_declarator *declarator;
- location_t id_loc; /* Currently only set for cdk_id and cdk_function. */
union {
/* For identifiers. */
struct {
diff --git a/gcc/df.h b/gcc/df.h
index 194cbcf..2e9f19f 100644
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -362,6 +362,7 @@ struct df_base_ref
ENUM_BITFIELD(df_ref_type) type : 8;
/* Type of ref. */
int flags : 16; /* Various df_ref_flags. */
+ unsigned int regno; /* The register number referenced. */
rtx reg; /* The register referenced. */
struct df_link *chain; /* Head of def-use, use-def. */
/* Pointer to the insn info of the containing instruction. FIXME!
@@ -373,7 +374,6 @@ struct df_base_ref
themselves rather than using an external structure. */
union df_ref_d *next_reg; /* Next ref with same regno and type. */
union df_ref_d *prev_reg; /* Prev ref with same regno and type. */
- unsigned int regno; /* The register number referenced. */
/* Location in the ref table. This is only valid after a call to
df_maybe_reorganize_[use,def]_refs which is an expensive operation. */
int id;
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 65e8c7f..3e0a032 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -74,13 +74,6 @@ struct diagnostic_context
/* True if it has been requested that warnings be treated as errors. */
bool warning_as_error_requested;
- /* For each option index that can be passed to warning() et all
- (OPT_* from options.h), this array may contain a new kind that
- the diagnostic should be changed to before reporting, or
- DK_UNSPECIFIED to leave it as the reported kind, or DK_IGNORED to
- not report it at all. N_OPTS is from <options.h>. */
- diagnostic_t classify_diagnostic[N_OPTS];
-
/* True if we should print the command line option which controls
each diagnostic, if known. */
bool show_option_requested;
@@ -88,6 +81,13 @@ struct diagnostic_context
/* True if we should raise a SIGABRT on errors. */
bool abort_on_error;
+ /* For each option index that can be passed to warning() et all
+ (OPT_* from options.h), this array may contain a new kind that
+ the diagnostic should be changed to before reporting, or
+ DK_UNSPECIFIED to leave it as the reported kind, or DK_IGNORED to
+ not report it at all. N_OPTS is from <options.h>. */
+ diagnostic_t classify_diagnostic[N_OPTS];
+
/* This function is called before any message is printed out. It is
responsible for preparing message prefix and such. For example, it
might say:
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 6e76998..58be89b 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -305,8 +305,8 @@ typedef struct GTY(()) dw_fde_struct {
const char *dw_fde_unlikely_section_end_label;
dw_cfi_ref dw_fde_cfi;
dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections. */
- unsigned funcdef_number;
HOST_WIDE_INT stack_realignment;
+ unsigned funcdef_number;
/* Dynamic realign argument pointer register. */
unsigned int drap_reg;
/* Virtual dynamic realign argument pointer register. */
diff --git a/gcc/expr.h b/gcc/expr.h
index 4fddde6..af230a6 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -273,9 +273,9 @@ do { \
typedef struct separate_ops
{
enum tree_code code;
+ location_t location;
tree type;
tree op0, op1, op2;
- location_t location;
} *sepops;
/* Functions from optabs.c, commonly used, and without need for the optabs
diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h
index 4cb2469..1df3abd 100644
--- a/gcc/ipa-prop.h
+++ b/gcc/ipa-prop.h
@@ -181,6 +181,15 @@ struct ipa_node_params
this function's parameters would not be analyzed by the different
stages of IPA CP. */
int param_count;
+ /* Whether this function is called with variable number of actual
+ arguments. */
+ unsigned called_with_var_arguments : 1;
+ /* Whether the modification analysis has already been performed. */
+ unsigned modification_analysis_done : 1;
+ /* Whether the param uses analysis has already been performed. */
+ unsigned uses_analysis_done : 1;
+ /* Whether the function is enqueued in an ipa_func_list. */
+ unsigned node_enqueued : 1;
/* Pointer to an array of structures describing individual formal
parameters. */
struct ipa_param_descriptor *params;
@@ -195,16 +204,6 @@ struct ipa_node_params
the profiling information of the original function and the versioned
one. */
gcov_type count_scale;
-
- /* Whether this function is called with variable number of actual
- arguments. */
- unsigned called_with_var_arguments : 1;
- /* Whether the modification analysis has already been performed. */
- unsigned modification_analysis_done : 1;
- /* Whether the param uses analysis has already been performed. */
- unsigned uses_analysis_done : 1;
- /* Whether the function is enqueued in an ipa_func_list. */
- unsigned node_enqueued : 1;
};
/* ipa_node_params access functions. Please use these to access fields that
diff --git a/gcc/optabs.h b/gcc/optabs.h
index 0161d3e..038ef2f 100644
--- a/gcc/optabs.h
+++ b/gcc/optabs.h
@@ -46,8 +46,8 @@ struct optab_handlers
struct optab_d
{
enum rtx_code code;
- const char *libcall_basename;
char libcall_suffix;
+ const char *libcall_basename;
void (*libcall_gen)(struct optab_d *, const char *name, char suffix,
enum machine_mode);
struct optab_handlers handlers[NUM_MACHINE_MODES];
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index f6db241..bb63be2 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -120,8 +120,8 @@ struct version_info
struct iv *iv; /* Induction variable description. */
bool has_nonlin_use; /* For a loop-level invariant, whether it is used in
an expression that is not an induction variable. */
- unsigned inv_id; /* Id of an invariant. */
bool preserve_biv; /* For the original biv, whether to preserve it. */
+ unsigned inv_id; /* Id of an invariant. */
};
/* Types of uses. */
@@ -192,7 +192,7 @@ struct iv_cand
unsigned id; /* The number of the candidate. */
bool important; /* Whether this is an "important" candidate, i.e. such
that it should be considered by all uses. */
- enum iv_position pos; /* Where it is computed. */
+ ENUM_BITFIELD(iv_position) pos : 8; /* Where it is computed. */
gimple incremented_at;/* For original biv, the statement where it is
incremented. */
tree var_before; /* The variable used for it before increment. */
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index bd43a4b..2c38c7f 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -198,6 +198,9 @@ typedef struct _loop_vec_info {
/* Unrolling factor */
int vectorization_factor;
+ /* The loop location in the source. */
+ LOC loop_line_number;
+
/* Unknown DRs according to which loop was peeled. */
struct data_reference *unaligned_dr;
@@ -228,9 +231,6 @@ typedef struct _loop_vec_info {
runtime (loop versioning) misalignment check. */
VEC(gimple,heap) *may_misalign_stmts;
- /* The loop location in the source. */
- LOC loop_line_number;
-
/* All interleaving chains of stores in the loop, represented by the first
stmt in the chain. */
VEC(gimple, heap) *strided_stores;
@@ -398,21 +398,23 @@ typedef struct _stmt_vec_info {
enum stmt_vec_info_type type;
+ /* Indicates whether this stmts is part of a computation whose result is
+ used outside the loop. */
+ bool live;
+
+ /* Stmt is part of some pattern (computation idiom) */
+ bool in_pattern_p;
+
+ /* For loads only, if there is a store with the same location, this field is
+ TRUE. */
+ bool read_write_dep;
+
/* The stmt to which this info struct refers to. */
gimple stmt;
/* The loop_vec_info with respect to which STMT is vectorized. */
loop_vec_info loop_vinfo;
- /* Not all stmts in the loop need to be vectorized. e.g, the increment
- of the loop induction variable and computation of array indexes. relevant
- indicates whether the stmt needs to be vectorized. */
- enum vect_relevant relevant;
-
- /* Indicates whether this stmts is part of a computation whose result is
- used outside the loop. */
- bool live;
-
/* The vector type to be used for the LHS of this statement. */
tree vectype;
@@ -436,9 +438,6 @@ typedef struct _stmt_vec_info {
tree dr_step;
tree dr_aligned_to;
- /* Stmt is part of some pattern (computation idiom) */
- bool in_pattern_p;
-
/* Used for various bookkeeping purposes, generally holding a pointer to
some other stmt S that is in some way "related" to this stmt.
Current use of this field is:
@@ -457,11 +456,17 @@ typedef struct _stmt_vec_info {
/* Classify the def of this stmt. */
enum vect_def_type def_type;
+ /* Whether the stmt is SLPed, loop-based vectorized, or both. */
+ enum slp_vect_type slp_type;
+
/* Interleaving info. */
/* First data-ref in the interleaving group. */
gimple first_dr;
/* Pointer to the next data-ref in the group. */
gimple next_dr;
+ /* In case that two or more stmts share data-ref, this is the pointer to the
+ previously detected stmt with the same dr. */
+ gimple same_dr_stmt;
/* The size of the interleaving group. */
unsigned int size;
/* For stores, number of stores from this group seen. We vectorize the last
@@ -470,12 +475,11 @@ typedef struct _stmt_vec_info {
/* For loads only, the gap from the previous load. For consecutive loads, GAP
is 1. */
unsigned int gap;
- /* In case that two or more stmts share data-ref, this is the pointer to the
- previously detected stmt with the same dr. */
- gimple same_dr_stmt;
- /* For loads only, if there is a store with the same location, this field is
- TRUE. */
- bool read_write_dep;
+
+ /* Not all stmts in the loop need to be vectorized. e.g, the increment
+ of the loop induction variable and computation of array indexes. relevant
+ indicates whether the stmt needs to be vectorized. */
+ enum vect_relevant relevant;
/* Vectorization costs associated with statement. */
struct
@@ -484,9 +488,6 @@ typedef struct _stmt_vec_info {
int inside_of_loop; /* Statements generated inside loop. */
} cost;
- /* Whether the stmt is SLPed, loop-based vectorized, or both. */
- enum slp_vect_type slp_type;
-
/* The bb_vec_info with respect to which STMT is vectorized. */
bb_vec_info bb_vinfo;
} *stmt_vec_info;
-------------- next part --------------
* struct df_base_ref
** BEFORE
struct df_base_ref {
enum df_ref_class cl:8; /* 0:24 4 */
enum df_ref_type type:8; /* 0:16 4 */
int flags:16; /* 0: 0 4 */
/* XXX 4 bytes hole, try to pack */
rtx reg; /* 8 8 */
struct df_link * chain; /* 16 8 */
struct df_insn_info * insn_info; /* 24 8 */
union df_ref_d * next_reg; /* 32 8 */
union df_ref_d * prev_reg; /* 40 8 */
unsigned int regno; /* 48 4 */
int id; /* 52 4 */
unsigned int ref_order; /* 56 4 */
/* size: 64, cachelines: 1 */
/* sum members: 56, holes: 1, sum holes: 4 */
/* padding: 4 */
}; /* definitions: 1 */
** AFTER
struct df_base_ref {
enum df_ref_class cl:8; /* 0:24 4 */
enum df_ref_type type:8; /* 0:16 4 */
int flags:16; /* 0: 0 4 */
unsigned int regno; /* 4 4 */
rtx reg; /* 8 8 */
struct df_link * chain; /* 16 8 */
struct df_insn_info * insn_info; /* 24 8 */
union df_ref_d * next_reg; /* 32 8 */
union df_ref_d * prev_reg; /* 40 8 */
int id; /* 48 4 */
unsigned int ref_order; /* 52 4 */
/* size: 56, cachelines: 1 */
/* last cacheline: 56 bytes */
}; /* definitions: 1 */
* struct c_token
** BEFORE
struct c_token {
enum cpp_ttype type:8; /* 0:24 4 */
enum c_id_kind id_kind:8; /* 0:16 4 */
enum rid keyword:8; /* 0: 8 4 */
enum pragma_kind pragma_kind:8; /* 0: 0 4 */
/* XXX 4 bytes hole, try to pack */
tree value; /* 8 8 */
location_t location; /* 16 4 */
/* size: 24, cachelines: 1 */
/* sum members: 16, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
** AFTER
struct c_token {
enum cpp_ttype type:8; /* 0:24 4 */
enum c_id_kind id_kind:8; /* 0:16 4 */
enum rid keyword:8; /* 0: 8 4 */
enum pragma_kind pragma_kind:8; /* 0: 0 4 */
location_t location; /* 4 4 */
tree value; /* 8 8 */
/* size: 16, cachelines: 1 */
/* last cacheline: 16 bytes */
}; /* definitions: 1 */
* struct c_declarator
** BEFORE
struct c_declarator {
enum c_declarator_kind kind; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
struct c_declarator * declarator; /* 8 8 */
location_t id_loc; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
union {
tree id; /* 8 */
struct c_arg_info * arg_info; /* 8 */
struct {
tree dimen; /* 24 8 */
int quals; /* 32 4 */
tree attrs; /* 40 8 */
unsigned int static_p:1; /* 48:31 4 */
unsigned int vla_unspec_p:1; /* 48:30 4 */
} array; /* 32 */
int pointer_quals; /* 4 */
tree attrs; /* 8 */
} u; /* 24 32 */
/* size: 56, cachelines: 1 */
/* sum members: 48, holes: 2, sum holes: 8 */
/* last cacheline: 56 bytes */
}; /* definitions: 1 */
** AFTER
struct c_declarator {
enum c_declarator_kind kind; /* 0 4 */
location_t id_loc; /* 4 4 */
struct c_declarator * declarator; /* 8 8 */
union {
tree id; /* 8 */
struct c_arg_info * arg_info; /* 8 */
struct {
tree dimen; /* 16 8 */
int quals; /* 24 4 */
tree attrs; /* 32 8 */
unsigned int static_p:1; /* 40:31 4 */
unsigned int vla_unspec_p:1; /* 40:30 4 */
} array; /* 32 */
int pointer_quals; /* 4 */
tree attrs; /* 8 */
} u; /* 16 32 */
/* size: 48, cachelines: 1 */
/* last cacheline: 48 bytes */
}; /* definitions: 1 */
* struct c_typespec
** BEFORE
struct c_typespec {
enum c_typespec_kind kind; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
tree spec; /* 8 8 */
tree expr; /* 16 8 */
unsigned char expr_const_operands; /* 24 1 */
/* size: 32, cachelines: 1 */
/* sum members: 21, holes: 1, sum holes: 4 */
/* padding: 7 */
/* last cacheline: 32 bytes */
}; /* definitions: 1 */
** AFTER
struct c_typespec {
enum c_typespec_kind kind; /* 0 4 */
unsigned char expr_const_operands; /* 4 1 */
/* XXX 3 bytes hole, try to pack */
tree spec; /* 8 8 */
tree expr; /* 16 8 */
/* size: 24, cachelines: 1 */
/* sum members: 21, holes: 1, sum holes: 3 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
* struct cp_declarator
** BEFORE
struct cp_declarator {
enum cp_declarator_kind kind:4; /* 0:28 4 */
unsigned int parameter_pack_p:1; /* 0:27 4 */
/* XXX 27 bits hole, try to pack */
/* XXX 4 bytes hole, try to pack */
tree attributes; /* 8 8 */
cp_declarator * declarator; /* 16 8 */
location_t id_loc; /* 24 4 */
/* XXX 4 bytes hole, try to pack */
union {
struct {
tree qualifying_scope; /* 32 8 */
tree unqualified_name; /* 40 8 */
special_function_kind sfk; /* 48 4 */
} id; /* 24 */
struct {
tree parameters; /* 32 8 */
cp_cv_quals qualifiers; /* 40 4 */
tree exception_specification; /* 48 8 */
tree late_return_type; /* 56 8 */
} function; /* 32 */
struct {
tree bounds; /* 32 8 */
} array; /* 8 */
struct {
cp_cv_quals qualifiers; /* 32 4 */
tree class_type; /* 40 8 */
} pointer; /* 16 */
struct {
cp_cv_quals qualifiers; /* 32 4 */
unsigned char rvalue_ref; /* 36 1 */
} reference; /* 8 */
} u; /* 32 32 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1 */
/* sum members: 56, holes: 2, sum holes: 8 */
/* bit holes: 1, sum bit holes: 27 bits */
}; /* definitions: 1 */
** AFTER
struct cp_declarator {
enum cp_declarator_kind kind:4; /* 0:28 4 */
unsigned int parameter_pack_p:1; /* 0:27 4 */
/* XXX 27 bits hole, try to pack */
location_t id_loc; /* 4 4 */
tree attributes; /* 8 8 */
cp_declarator * declarator; /* 16 8 */
union {
struct {
tree qualifying_scope; /* 24 8 */
tree unqualified_name; /* 32 8 */
special_function_kind sfk; /* 40 4 */
} id; /* 24 */
struct {
tree parameters; /* 24 8 */
cp_cv_quals qualifiers; /* 32 4 */
tree exception_specification; /* 40 8 */
tree late_return_type; /* 48 8 */
} function; /* 32 */
struct {
tree bounds; /* 24 8 */
} array; /* 8 */
struct {
cp_cv_quals qualifiers; /* 24 4 */
tree class_type; /* 32 8 */
} pointer; /* 16 */
struct {
cp_cv_quals qualifiers; /* 24 4 */
unsigned char rvalue_ref; /* 28 1 */
} reference; /* 8 */
} u; /* 24 32 */
/* size: 56, cachelines: 1 */
/* bit holes: 1, sum bit holes: 27 bits */
/* last cacheline: 56 bytes */
}; /* definitions: 1 */
* struct cp_decl_specifier_seq
** BEFORE
struct cp_decl_specifier_seq {
unsigned int specs[15]; /* 0 60 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 1 boundary (64 bytes) --- */
tree type; /* 64 8 */
location_t type_location; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
tree attributes; /* 80 8 */
tree redefined_builtin_type; /* 88 8 */
cp_storage_class storage_class; /* 96 4 */
unsigned int user_defined_type_p:1; /* 100:31 4 */
unsigned int multiple_types_p:1; /* 100:30 4 */
unsigned int conflicting_specifiers_p:1; /* 100:29 4 */
unsigned int any_specifiers_p:1; /* 100:28 4 */
unsigned int any_type_specifiers_p:1; /* 100:27 4 */
unsigned int explicit_int_p:1; /* 100:26 4 */
unsigned int explicit_char_p:1; /* 100:25 4 */
/* size: 104, cachelines: 2 */
/* sum members: 96, holes: 2, sum holes: 8 */
/* bit_padding: 25 bits */
/* last cacheline: 40 bytes */
}; /* definitions: 1 */
** AFTER
struct cp_decl_specifier_seq {
unsigned int specs[15]; /* 0 60 */
location_t type_location; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
tree type; /* 64 8 */
tree attributes; /* 72 8 */
tree redefined_builtin_type; /* 80 8 */
cp_storage_class storage_class; /* 88 4 */
unsigned int user_defined_type_p:1; /* 92:31 4 */
unsigned int multiple_types_p:1; /* 92:30 4 */
unsigned int conflicting_specifiers_p:1; /* 92:29 4 */
unsigned int any_specifiers_p:1; /* 92:28 4 */
unsigned int any_type_specifiers_p:1; /* 92:27 4 */
unsigned int explicit_int_p:1; /* 92:26 4 */
unsigned int explicit_char_p:1; /* 92:25 4 */
/* size: 96, cachelines: 2 */
/* bit_padding: 25 bits */
/* last cacheline: 32 bytes */
}; /* definitions: 1 */
* struct optab_d
** BEFORE
struct optab_d {
enum rtx_code code; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
const char * libcall_basename; /* 8 8 */
char libcall_suffix; /* 16 1 */
/* XXX 7 bytes hole, try to pack */
void (*libcall_gen)(struct optab_d *, const char *, char, enum machine_mode); /* 24 8 */
struct optab_handlers handlers[87]; /* 32 348 */
/* --- cacheline 5 boundary (320 bytes) was 60 bytes ago --- */
/* size: 384, cachelines: 6 */
/* sum members: 369, holes: 2, sum holes: 11 */
/* padding: 4 */
}; /* definitions: 1 */
** AFTER
struct optab_d {
enum rtx_code code; /* 0 4 */
char libcall_suffix; /* 4 1 */
/* XXX 3 bytes hole, try to pack */
const char * libcall_basename; /* 8 8 */
void (*libcall_gen)(struct optab_d *, const char *, char, enum machine_mode); /* 16 8 */
struct optab_handlers handlers[87]; /* 24 348 */
/* --- cacheline 5 boundary (320 bytes) was 52 bytes ago --- */
/* size: 376, cachelines: 6 */
/* sum members: 369, holes: 1, sum holes: 3 */
/* padding: 4 */
/* last cacheline: 56 bytes */
}; /* definitions: 1 */
* struct separate_ops
** BEFORE
struct separate_ops {
enum tree_code code; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
tree type; /* 8 8 */
tree op0; /* 16 8 */
tree op1; /* 24 8 */
tree op2; /* 32 8 */
location_t location; /* 40 4 */
/* size: 48, cachelines: 1 */
/* sum members: 40, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 48 bytes */
}; /* definitions: 1 */
** AFTER
struct separate_ops {
enum tree_code code; /* 0 4 */
location_t location; /* 4 4 */
tree type; /* 8 8 */
tree op0; /* 16 8 */
tree op1; /* 24 8 */
tree op2; /* 32 8 */
/* size: 40, cachelines: 1 */
/* last cacheline: 40 bytes */
}; /* definitions: 1 */
* struct _loop_vec_info
** BEFORE
struct _loop_vec_info {
struct loop * loop; /* 0 8 */
basic_block * bbs; /* 8 8 */
tree num_iters; /* 16 8 */
tree num_iters_unchanged; /* 24 8 */
int min_profitable_iters; /* 32 4 */
unsigned char vectorizable; /* 36 1 */
/* XXX 3 bytes hole, try to pack */
int vectorization_factor; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
struct data_reference * unaligned_dr; /* 48 8 */
int peeling_for_alignment; /* 56 4 */
int ptr_mask; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
VEC_data_reference_p_heap * datarefs; /* 64 8 */
VEC_ddr_p_heap * ddrs; /* 72 8 */
VEC_ddr_p_heap * may_alias_ddrs; /* 80 8 */
VEC_gimple_heap * may_misalign_stmts; /* 88 8 */
LOC loop_line_number; /* 96 4 */
/* XXX 4 bytes hole, try to pack */
VEC_gimple_heap * strided_stores; /* 104 8 */
VEC_slp_instance_heap * slp_instances; /* 112 8 */
unsigned int slp_unrolling_factor; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
VEC_gimple_heap * reductions; /* 128 8 */
/* size: 136, cachelines: 3 */
/* sum members: 121, holes: 4, sum holes: 15 */
/* last cacheline: 8 bytes */
}; /* definitions: 1 */
** AFTER
struct _loop_vec_info {
struct loop * loop; /* 0 8 */
basic_block * bbs; /* 8 8 */
tree num_iters; /* 16 8 */
tree num_iters_unchanged; /* 24 8 */
int min_profitable_iters; /* 32 4 */
unsigned char vectorizable; /* 36 1 */
/* XXX 3 bytes hole, try to pack */
int vectorization_factor; /* 40 4 */
LOC loop_line_number; /* 44 4 */
struct data_reference * unaligned_dr; /* 48 8 */
int peeling_for_alignment; /* 56 4 */
int ptr_mask; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
VEC_data_reference_p_heap * datarefs; /* 64 8 */
VEC_ddr_p_heap * ddrs; /* 72 8 */
VEC_ddr_p_heap * may_alias_ddrs; /* 80 8 */
VEC_gimple_heap * may_misalign_stmts; /* 88 8 */
VEC_gimple_heap * strided_stores; /* 96 8 */
VEC_slp_instance_heap * slp_instances; /* 104 8 */
unsigned int slp_unrolling_factor; /* 112 4 */
/* XXX 4 bytes hole, try to pack */
VEC_gimple_heap * reductions; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
/* size: 128, cachelines: 2 */
/* sum members: 121, holes: 2, sum holes: 7 */
}; /* definitions: 1 */
* struct _stmt_vec_info
** BEFORE
struct _stmt_vec_info {
enum stmt_vec_info_type type; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
gimple stmt; /* 8 8 */
loop_vec_info loop_vinfo; /* 16 8 */
enum vect_relevant relevant; /* 24 4 */
unsigned char live; /* 28 1 */
/* XXX 3 bytes hole, try to pack */
tree vectype; /* 32 8 */
gimple vectorized_stmt; /* 40 8 */
struct data_reference * data_ref_info; /* 48 8 */
tree dr_base_address; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
tree dr_init; /* 64 8 */
tree dr_offset; /* 72 8 */
tree dr_step; /* 80 8 */
tree dr_aligned_to; /* 88 8 */
unsigned char in_pattern_p; /* 96 1 */
/* XXX 7 bytes hole, try to pack */
gimple related_stmt; /* 104 8 */
VEC_dr_p_heap * same_align_refs; /* 112 8 */
enum vect_def_type def_type; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
gimple first_dr; /* 128 8 */
gimple next_dr; /* 136 8 */
unsigned int size; /* 144 4 */
unsigned int store_count; /* 148 4 */
unsigned int gap; /* 152 4 */
/* XXX 4 bytes hole, try to pack */
gimple same_dr_stmt; /* 160 8 */
unsigned char read_write_dep; /* 168 1 */
/* XXX 3 bytes hole, try to pack */
struct {
int outside_of_loop; /* 172 4 */
int inside_of_loop; /* 176 4 */
} cost; /* 172 8 */
enum slp_vect_type slp_type; /* 180 4 */
bb_vec_info bb_vinfo; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
/* size: 192, cachelines: 3 */
/* sum members: 167, holes: 6, sum holes: 25 */
}; /* definitions: 1 */
** AFTER
struct _stmt_vec_info {
enum stmt_vec_info_type type; /* 0 4 */
unsigned char live; /* 4 1 */
unsigned char in_pattern_p; /* 5 1 */
unsigned char read_write_dep; /* 6 1 */
/* XXX 1 byte hole, try to pack */
gimple stmt; /* 8 8 */
loop_vec_info loop_vinfo; /* 16 8 */
tree vectype; /* 24 8 */
gimple vectorized_stmt; /* 32 8 */
struct data_reference * data_ref_info; /* 40 8 */
tree dr_base_address; /* 48 8 */
tree dr_init; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
tree dr_offset; /* 64 8 */
tree dr_step; /* 72 8 */
tree dr_aligned_to; /* 80 8 */
gimple related_stmt; /* 88 8 */
VEC_dr_p_heap * same_align_refs; /* 96 8 */
enum vect_def_type def_type; /* 104 4 */
enum slp_vect_type slp_type; /* 108 4 */
gimple first_dr; /* 112 8 */
gimple next_dr; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
gimple same_dr_stmt; /* 128 8 */
unsigned int size; /* 136 4 */
unsigned int store_count; /* 140 4 */
unsigned int gap; /* 144 4 */
enum vect_relevant relevant; /* 148 4 */
struct {
int outside_of_loop; /* 152 4 */
int inside_of_loop; /* 156 4 */
} cost; /* 152 8 */
bb_vec_info bb_vinfo; /* 160 8 */
/* size: 168, cachelines: 3 */
/* sum members: 167, holes: 1, sum holes: 1 */
/* last cacheline: 40 bytes */
}; /* definitions: 1 */
* struct loop
** BEFORE
struct loop {
int num; /* 0 4 */
unsigned int ninsns; /* 4 4 */
struct basic_block_def * header; /* 8 8 */
struct basic_block_def * latch; /* 16 8 */
struct lpt_decision lpt_decision; /* 24 8 */
unsigned int av_ninsns; /* 32 4 */
unsigned int num_nodes; /* 36 4 */
VEC_loop_p_gc * superloops; /* 40 8 */
struct loop * inner; /* 48 8 */
struct loop * next; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
void * aux; /* 64 8 */
tree nb_iterations; /* 72 8 */
double_int nb_iterations_upper_bound; /* 80 16 */
double_int nb_iterations_estimate; /* 96 16 */
unsigned char any_upper_bound; /* 112 1 */
unsigned char any_estimate; /* 113 1 */
/* XXX 2 bytes hole, try to pack */
enum loop_estimation estimate_state; /* 116 4 */
struct nb_iter_bound * bounds; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
struct loop_exit * exits; /* 128 8 */
unsigned char can_be_parallel; /* 136 1 */
/* XXX 7 bytes hole, try to pack */
tree single_iv; /* 144 8 */
/* size: 152, cachelines: 3 */
/* sum members: 143, holes: 2, sum holes: 9 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
** AFTER
struct loop {
int num; /* 0 4 */
unsigned int ninsns; /* 4 4 */
struct basic_block_def * header; /* 8 8 */
struct basic_block_def * latch; /* 16 8 */
struct lpt_decision lpt_decision; /* 24 8 */
unsigned int av_ninsns; /* 32 4 */
unsigned int num_nodes; /* 36 4 */
VEC_loop_p_gc * superloops; /* 40 8 */
struct loop * inner; /* 48 8 */
struct loop * next; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
void * aux; /* 64 8 */
tree nb_iterations; /* 72 8 */
double_int nb_iterations_upper_bound; /* 80 16 */
double_int nb_iterations_estimate; /* 96 16 */
unsigned char any_upper_bound; /* 112 1 */
unsigned char any_estimate; /* 113 1 */
unsigned char can_be_parallel; /* 114 1 */
/* XXX 1 byte hole, try to pack */
enum loop_estimation estimate_state; /* 116 4 */
struct nb_iter_bound * bounds; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
struct loop_exit * exits; /* 128 8 */
tree single_iv; /* 136 8 */
/* size: 144, cachelines: 3 */
/* sum members: 143, holes: 1, sum holes: 1 */
/* last cacheline: 16 bytes */
}; /* definitions: 1 */
* struct control_flow_graph
** BEFORE
struct control_flow_graph {
basic_block x_entry_block_ptr; /* 0 8 */
basic_block x_exit_block_ptr; /* 8 8 */
VEC_basic_block_gc * x_basic_block_info; /* 16 8 */
int x_n_basic_blocks; /* 24 4 */
int x_n_edges; /* 28 4 */
int x_last_basic_block; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
VEC_basic_block_gc * x_label_to_block_map; /* 40 8 */
enum profile_status_d x_profile_status; /* 48 4 */
enum dom_state x_dom_computed[2]; /* 52 8 */
unsigned int x_n_bbs_in_dom_tree[2]; /* 60 8 */
/* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */
int max_jumptable_ents; /* 68 4 */
int last_label_uid; /* 72 4 */
/* size: 80, cachelines: 2 */
/* sum members: 72, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 16 bytes */
}; /* definitions: 1 */
** AFTER
struct control_flow_graph {
basic_block x_entry_block_ptr; /* 0 8 */
basic_block x_exit_block_ptr; /* 8 8 */
VEC_basic_block_gc * x_basic_block_info; /* 16 8 */
int x_n_basic_blocks; /* 24 4 */
int x_n_edges; /* 28 4 */
int x_last_basic_block; /* 32 4 */
int last_label_uid; /* 36 4 */
VEC_basic_block_gc * x_label_to_block_map; /* 40 8 */
enum profile_status_d x_profile_status; /* 48 4 */
enum dom_state x_dom_computed[2]; /* 52 8 */
unsigned int x_n_bbs_in_dom_tree[2]; /* 60 8 */
/* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */
int max_jumptable_ents; /* 68 4 */
/* size: 72, cachelines: 2 */
/* last cacheline: 8 bytes */
}; /* definitions: 1 */
* struct dw_fde_struct
** BEFORE
struct dw_fde_struct {
tree decl; /* 0 8 */
const char * dw_fde_begin; /* 8 8 */
const char * dw_fde_current_label; /* 16 8 */
const char * dw_fde_end; /* 24 8 */
const char * dw_fde_hot_section_label; /* 32 8 */
const char * dw_fde_hot_section_end_label; /* 40 8 */
const char * dw_fde_unlikely_section_label; /* 48 8 */
const char * dw_fde_unlikely_section_end_label; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
dw_cfi_ref dw_fde_cfi; /* 64 8 */
dw_cfi_ref dw_fde_switch_cfi; /* 72 8 */
unsigned int funcdef_number; /* 80 4 */
/* XXX 4 bytes hole, try to pack */
long int stack_realignment; /* 88 8 */
unsigned int drap_reg; /* 96 4 */
unsigned int vdrap_reg; /* 100 4 */
unsigned int all_throwers_are_sibcalls:1; /* 104:31 4 */
unsigned int nothrow:1; /* 104:30 4 */
unsigned int uses_eh_lsda:1; /* 104:29 4 */
unsigned int stack_realign:1; /* 104:28 4 */
unsigned int drap_reg_saved:1; /* 104:27 4 */
unsigned int in_std_section:1; /* 104:26 4 */
unsigned int cold_in_std_section:1; /* 104:25 4 */
unsigned int dw_fde_switched_sections:1; /* 104:24 4 */
unsigned int dw_fde_switched_cold_to_hot:1; /* 104:23 4 */
/* size: 112, cachelines: 2 */
/* sum members: 104, holes: 1, sum holes: 4 */
/* padding: 4 */
/* bit_padding: 23 bits */
/* last cacheline: 48 bytes */
}; /* definitions: 1 */
** AFTER
struct dw_fde_struct {
tree decl; /* 0 8 */
const char * dw_fde_begin; /* 8 8 */
const char * dw_fde_current_label; /* 16 8 */
const char * dw_fde_end; /* 24 8 */
const char * dw_fde_hot_section_label; /* 32 8 */
const char * dw_fde_hot_section_end_label; /* 40 8 */
const char * dw_fde_unlikely_section_label; /* 48 8 */
const char * dw_fde_unlikely_section_end_label; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
dw_cfi_ref dw_fde_cfi; /* 64 8 */
dw_cfi_ref dw_fde_switch_cfi; /* 72 8 */
long int stack_realignment; /* 80 8 */
unsigned int funcdef_number; /* 88 4 */
unsigned int drap_reg; /* 92 4 */
unsigned int vdrap_reg; /* 96 4 */
unsigned int all_throwers_are_sibcalls:1; /* 100:31 4 */
unsigned int nothrow:1; /* 100:30 4 */
unsigned int uses_eh_lsda:1; /* 100:29 4 */
unsigned int stack_realign:1; /* 100:28 4 */
unsigned int drap_reg_saved:1; /* 100:27 4 */
unsigned int in_std_section:1; /* 100:26 4 */
unsigned int cold_in_std_section:1; /* 100:25 4 */
unsigned int dw_fde_switched_sections:1; /* 100:24 4 */
unsigned int dw_fde_switched_cold_to_hot:1; /* 100:23 4 */
/* size: 104, cachelines: 2 */
/* bit_padding: 23 bits */
/* last cacheline: 40 bytes */
}; /* definitions: 1 */
* struct diagnostic_context
** BEFORE
struct diagnostic_context {
pretty_printer * printer; /* 0 8 */
int diagnostic_count[12]; /* 8 48 */
unsigned char some_warnings_are_errors; /* 56 1 */
unsigned char warning_as_error_requested; /* 57 1 */
/* XXX 2 bytes hole, try to pack */
diagnostic_t classify_diagnostic[875]; /* 60 3500 */
/* --- cacheline 55 boundary (3520 bytes) was 40 bytes ago --- */
unsigned char show_option_requested; /* 3560 1 */
unsigned char abort_on_error; /* 3561 1 */
/* XXX 6 bytes hole, try to pack */
diagnostic_starter_fn begin_diagnostic; /* 3568 8 */
diagnostic_finalizer_fn end_diagnostic; /* 3576 8 */
/* --- cacheline 56 boundary (3584 bytes) --- */
void (*internal_error)(const char *, va_list *); /* 3584 8 */
tree last_function; /* 3592 8 */
const struct line_map * last_module; /* 3600 8 */
int lock; /* 3608 4 */
unsigned char inhibit_notes_p; /* 3612 1 */
/* size: 3616, cachelines: 57 */
/* sum members: 3605, holes: 2, sum holes: 8 */
/* padding: 3 */
/* last cacheline: 32 bytes */
}; /* definitions: 1 */
** AFTER
struct diagnostic_context {
pretty_printer * printer; /* 0 8 */
int diagnostic_count[12]; /* 8 48 */
unsigned char some_warnings_are_errors; /* 56 1 */
unsigned char warning_as_error_requested; /* 57 1 */
unsigned char show_option_requested; /* 58 1 */
unsigned char abort_on_error; /* 59 1 */
diagnostic_t classify_diagnostic[875]; /* 60 3500 */
/* --- cacheline 55 boundary (3520 bytes) was 40 bytes ago --- */
diagnostic_starter_fn begin_diagnostic; /* 3560 8 */
diagnostic_finalizer_fn end_diagnostic; /* 3568 8 */
void (*internal_error)(const char *, va_list *); /* 3576 8 */
/* --- cacheline 56 boundary (3584 bytes) --- */
tree last_function; /* 3584 8 */
const struct line_map * last_module; /* 3592 8 */
int lock; /* 3600 4 */
unsigned char inhibit_notes_p; /* 3604 1 */
/* size: 3608, cachelines: 57 */
/* padding: 3 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
* struct ipa_node_params
** BEFORE
struct ipa_node_params {
int param_count; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
struct ipa_param_descriptor * params; /* 8 8 */
struct ipa_param_call_note * param_calls; /* 16 8 */
struct cgraph_node * ipcp_orig_node; /* 24 8 */
gcov_type count_scale; /* 32 8 */
unsigned int called_with_var_arguments:1; /* 40:31 4 */
unsigned int modification_analysis_done:1; /* 40:30 4 */
unsigned int uses_analysis_done:1; /* 40:29 4 */
unsigned int node_enqueued:1; /* 40:28 4 */
/* size: 48, cachelines: 1 */
/* sum members: 40, holes: 1, sum holes: 4 */
/* padding: 4 */
/* bit_padding: 28 bits */
/* last cacheline: 48 bytes */
}; /* definitions: 1 */
** AFTER
struct ipa_node_params {
int param_count; /* 0 4 */
unsigned int called_with_var_arguments:1; /* 4:31 4 */
unsigned int modification_analysis_done:1; /* 4:30 4 */
unsigned int uses_analysis_done:1; /* 4:29 4 */
unsigned int node_enqueued:1; /* 4:28 4 */
/* XXX 28 bits hole, try to pack */
struct ipa_param_descriptor * params; /* 8 8 */
struct ipa_param_call_note * param_calls; /* 16 8 */
struct cgraph_node * ipcp_orig_node; /* 24 8 */
gcov_type count_scale; /* 32 8 */
/* size: 40, cachelines: 1 */
/* bit holes: 1, sum bit holes: 28 bits */
/* last cacheline: 40 bytes */
}; /* definitions: 1 */
* struct version_info
** BEFORE
struct version_info {
tree name; /* 0 8 */
struct iv * iv; /* 8 8 */
unsigned char has_nonlin_use; /* 16 1 */
/* XXX 3 bytes hole, try to pack */
unsigned int inv_id; /* 20 4 */
unsigned char preserve_biv; /* 24 1 */
/* size: 32, cachelines: 1 */
/* sum members: 22, holes: 1, sum holes: 3 */
/* padding: 7 */
/* last cacheline: 32 bytes */
}; /* definitions: 1 */
** AFTER
struct version_info {
tree name; /* 0 8 */
struct iv * iv; /* 8 8 */
unsigned char has_nonlin_use; /* 16 1 */
unsigned char preserve_biv; /* 17 1 */
/* XXX 2 bytes hole, try to pack */
unsigned int inv_id; /* 20 4 */
/* size: 24, cachelines: 1 */
/* sum members: 22, holes: 1, sum holes: 2 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
* struct iv_cand
** BEFORE
struct iv_cand {
unsigned int id; /* 0 4 */
unsigned char important; /* 4 1 */
/* XXX 3 bytes hole, try to pack */
enum iv_position pos; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
gimple incremented_at; /* 16 8 */
tree var_before; /* 24 8 */
tree var_after; /* 32 8 */
struct iv * iv; /* 40 8 */
unsigned int cost; /* 48 4 */
unsigned int cost_step; /* 52 4 */
struct iv_use * ainc_use; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
bitmap depends_on; /* 64 8 */
/* size: 72, cachelines: 2 */
/* sum members: 65, holes: 2, sum holes: 7 */
/* last cacheline: 8 bytes */
}; /* definitions: 1 */
** AFTER
struct iv_cand {
unsigned int id; /* 0 4 */
unsigned char important; /* 4 1 */
/* Bitfield combined with previous fields */
enum iv_position pos:8; /* 4:16 4 */
/* XXX 24 bits hole, try to pack */
gimple incremented_at; /* 8 8 */
tree var_before; /* 16 8 */
tree var_after; /* 24 8 */
struct iv * iv; /* 32 8 */
unsigned int cost; /* 40 4 */
unsigned int cost_step; /* 44 4 */
struct iv_use * ainc_use; /* 48 8 */
bitmap depends_on; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1 */
/* bit holes: 1, sum bit holes: 24 bits */
}; /* definitions: 1 */
* struct ix86_frame
** BEFORE
struct ix86_frame {
int padding0; /* 0 4 */
int nsseregs; /* 4 4 */
int nregs; /* 8 4 */
int padding1; /* 12 4 */
int va_arg_size; /* 16 4 */
/* XXX 4 bytes hole, try to pack */
long int frame; /* 24 8 */
int padding2; /* 32 4 */
int outgoing_arguments_size; /* 36 4 */
int red_zone_size; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
long int to_allocate; /* 48 8 */
long int frame_pointer_offset; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
long int hard_frame_pointer_offset; /* 64 8 */
long int stack_pointer_offset; /* 72 8 */
unsigned char save_regs_using_mov; /* 80 1 */
/* size: 88, cachelines: 2 */
/* sum members: 73, holes: 2, sum holes: 8 */
/* padding: 7 */
/* last cacheline: 24 bytes */
}; /* definitions: 1 */
** AFTER
struct ix86_frame {
int padding0; /* 0 4 */
int nsseregs; /* 4 4 */
int nregs; /* 8 4 */
int padding1; /* 12 4 */
int va_arg_size; /* 16 4 */
int red_zone_size; /* 20 4 */
long int frame; /* 24 8 */
int padding2; /* 32 4 */
int outgoing_arguments_size; /* 36 4 */
long int to_allocate; /* 40 8 */
long int frame_pointer_offset; /* 48 8 */
long int hard_frame_pointer_offset; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
long int stack_pointer_offset; /* 64 8 */
unsigned char save_regs_using_mov; /* 72 1 */
/* size: 80, cachelines: 2 */
/* padding: 7 */
/* last cacheline: 16 bytes */
}; /* definitions: 1 */
* struct machine_function (x86)
** BEFORE
struct machine_function {
struct stack_local_entry * stack_locals; /* 0 8 */
const char * some_ld_name; /* 8 8 */
int varargs_gpr_size; /* 16 4 */
int varargs_fpr_size; /* 20 4 */
int optimize_mode_switching[4]; /* 24 16 */
int use_fast_prologue_epilogue_nregs; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
struct machine_cfa_state cfa; /* 48 16 */
/* --- cacheline 1 boundary (64 bytes) --- */
enum calling_abi call_abi; /* 64 4 */
unsigned int accesses_prev_frame:1; /* 68:31 4 */
unsigned int needs_cld:1; /* 68:30 4 */
unsigned int use_fast_prologue_epilogue:1; /* 68:29 4 */
unsigned int tls_descriptor_call_expanded_p:1; /* 68:28 4 */
unsigned int static_chain_on_stack:1; /* 68:27 4 */
/* size: 72, cachelines: 2 */
/* sum members: 68, holes: 1, sum holes: 4 */
/* bit_padding: 27 bits */
/* last cacheline: 8 bytes */
}; /* definitions: 1 */
** AFTER
struct machine_function {
struct stack_local_entry * stack_locals; /* 0 8 */
const char * some_ld_name; /* 8 8 */
int varargs_gpr_size; /* 16 4 */
int varargs_fpr_size; /* 20 4 */
int optimize_mode_switching[4]; /* 24 16 */
int use_fast_prologue_epilogue_nregs; /* 40 4 */
enum calling_abi call_abi:8; /* 44:24 4 */
unsigned int accesses_prev_frame:1; /* 44:23 4 */
unsigned int needs_cld:1; /* 44:22 4 */
unsigned int use_fast_prologue_epilogue:1; /* 44:21 4 */
unsigned int tls_descriptor_call_expanded_p:1; /* 44:20 4 */
unsigned int static_chain_on_stack:1; /* 44:19 4 */
/* XXX 19 bits hole, try to pack */
struct machine_cfa_state cfa; /* 48 16 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1 */
/* bit holes: 1, sum bit holes: 19 bits */
}; /* definitions: 1 */
* struct c_declspecs
** BEFORE
struct c_declspecs {
tree type; /* 0 8 */
tree expr; /* 8 8 */
tree decl_attr; /* 16 8 */
tree attrs; /* 24 8 */
enum c_typespec_keyword typespec_word; /* 32 4 */
enum c_storage_class storage_class; /* 36 4 */
unsigned int expr_const_operands:1; /* 40:31 4 */
unsigned int declspecs_seen_p:1; /* 40:30 4 */
unsigned int type_seen_p:1; /* 40:29 4 */
unsigned int non_sc_seen_p:1; /* 40:28 4 */
unsigned int typedef_p:1; /* 40:27 4 */
unsigned int tag_defined_p:1; /* 40:26 4 */
unsigned int explicit_signed_p:1; /* 40:25 4 */
unsigned int deprecated_p:1; /* 40:24 4 */
/* XXX 24 bits hole, try to pack */
unsigned int default_int_p; /* 44 4 */
unsigned int long_p:1; /* 48:31 4 */
unsigned int long_long_p:1; /* 48:30 4 */
unsigned int short_p:1; /* 48:29 4 */
unsigned int signed_p:1; /* 48:28 4 */
unsigned int unsigned_p:1; /* 48:27 4 */
unsigned int complex_p:1; /* 48:26 4 */
unsigned int inline_p:1; /* 48:25 4 */
unsigned int thread_p:1; /* 48:24 4 */
unsigned int const_p:1; /* 48:23 4 */
unsigned int volatile_p:1; /* 48:22 4 */
unsigned int restrict_p:1; /* 48:21 4 */
unsigned int saturating_p:1; /* 48:20 4 */
/* XXX 4 bits hole, try to pack */
/* Bitfield combined with next fields */
addr_space_t address_space; /* 50 1 */
/* size: 56, cachelines: 1 */
/* bit holes: 2, sum bit holes: 28 bits */
/* padding: 5 */
/* last cacheline: 56 bytes */
}; /* definitions: 1 */
** AFTER
More information about the Gcc-patches
mailing list