gcc/0036-StructReorg-Refactoring-reorder-fields-to-struct-lay.patch
benniaobufeijiushiji 1080ba4291 [Sync] Sync patch from openeuler/gcc
Sync patch from openeuler/gcc - 20220808

(cherry picked from commit 3d663928609a23db4fc8b4ba1039a53a943ac1ed)
2022-09-13 10:18:57 +08:00

1116 lines
46 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 3c06a2cda7220a48866ae2dbe3f365e300cbaeca Mon Sep 17 00:00:00 2001
From: liyancheng <412998149@qq.com>
Date: Wed, 1 Jun 2022 17:22:12 +0800
Subject: [PATCH 02/12] [StructReorg] Refactoring reorder fields to struct
layout optimization
Refactor the reorder_fields optimization into struct layout optimization. Add
flag -fipa-struct-reorg=[0,1,2] to enable none, strcut reorg, reorder fields
optimizations.
---
gcc/common.opt | 6 +-
gcc/ipa-struct-reorg/ipa-struct-reorg.c | 167 +++++++++---------
gcc/ipa-struct-reorg/ipa-struct-reorg.h | 2 +-
gcc/opts.c | 12 ++
gcc/passes.def | 2 +-
gcc/symbol-summary.h | 4 +-
.../struct/rf_DTE_struct_instance_field.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_DTE_verify.c | 2 +-
.../gcc.dg/struct/rf_check_ptr_layers_bug.c | 2 +-
.../gcc.dg/struct/rf_create_fields_bug.c | 2 +-
.../gcc.dg/struct/rf_create_new_func_bug.c | 2 +-
.../gcc.dg/struct/rf_ele_minus_verify.c | 2 +-
.../gcc.dg/struct/rf_escape_by_base.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_int_cast_ptr.c | 2 +-
.../gcc.dg/struct/rf_mem_ref_offset.c | 2 +-
.../struct/rf_mul_layer_ptr_record_bug.c | 2 +-
.../gcc.dg/struct/rf_pass_conflict.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_ptr2void_lto.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_ptr_diff.c | 2 +-
.../gcc.dg/struct/rf_ptr_negate_expr.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_ptr_offset.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_ptr_ptr.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_ptr_ptr_ptr.c | 2 +-
.../gcc.dg/struct/rf_rescusive_type.c | 2 +-
.../struct/rf_rewrite_assign_more_cmp.c | 2 +-
.../gcc.dg/struct/rf_rewrite_cond_bug.c | 2 +-
.../gcc.dg/struct/rf_rewrite_cond_more_cmp.c | 2 +-
.../gcc.dg/struct/rf_rewrite_phi_bug.c | 2 +-
gcc/testsuite/gcc.dg/struct/rf_visible_func.c | 2 +-
.../gcc.dg/struct/rf_void_ptr_param_func.c | 2 +-
.../gcc.dg/struct/sr_pointer_minus.c | 2 +-
gcc/testsuite/gcc.dg/struct/struct-reorg.exp | 19 ++
gcc/timevar.def | 2 +-
gcc/tree-pass.h | 2 +-
gcc/tree.c | 4 +-
35 files changed, 153 insertions(+), 117 deletions(-)
diff --git a/gcc/common.opt b/gcc/common.opt
index 4dd566def..7fc075d35 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1876,13 +1876,17 @@ Common Ignore
Does nothing. Preserved for backward compatibility.
fipa-reorder-fields
-Common Report Var(flag_ipa_reorder_fields) Init(0) Optimization
+Common Report Var(flag_ipa_struct_layout) Init(0) Optimization
Perform structure fields reorder optimizations.
fipa-struct-reorg
Common Report Var(flag_ipa_struct_reorg) Init(0) Optimization
Perform structure layout optimizations.
+fipa-struct-reorg=
+Common RejectNegative Joined UInteger Var(struct_layout_optimize_level) Init(0) IntegerRange(0, 2)
+-fipa-struct-reorg=[0,1,2] adding none, struct-reorg, reorder-fields optimizations.
+
fipa-extend-auto-profile
Common Report Var(flag_ipa_extend_auto_profile)
Use sample profile information for source code.
diff --git a/gcc/ipa-struct-reorg/ipa-struct-reorg.c b/gcc/ipa-struct-reorg/ipa-struct-reorg.c
index 2bf41e0d8..9214ee74a 100644
--- a/gcc/ipa-struct-reorg/ipa-struct-reorg.c
+++ b/gcc/ipa-struct-reorg/ipa-struct-reorg.c
@@ -235,7 +235,7 @@ enum srmode
{
NORMAL = 0,
COMPLETE_STRUCT_RELAYOUT,
- STRUCT_REORDER_FIELDS
+ STRUCT_LAYOUT_OPTIMIZE
};
static bool is_result_of_mult (tree arg, tree *num, tree struct_size);
@@ -552,7 +552,7 @@ void
srtype::simple_dump (FILE *f)
{
print_generic_expr (f, type);
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
fprintf (f, "(%d)", TYPE_UID (type));
}
@@ -593,9 +593,9 @@ srfield::create_new_fields (tree newtype[max_split],
tree newfields[max_split],
tree newlast[max_split])
{
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
- create_new_reorder_fields (newtype, newfields, newlast);
+ create_new_optimized_fields (newtype, newfields, newlast);
return;
}
@@ -689,15 +689,15 @@ srfield::reorder_fields (tree newfields[max_split], tree newlast[max_split],
}
}
-/* Create the new reorder fields for this field.
+/* Create the new optimized fields for this field.
newtype[max_split]: srtype's member variable,
newfields[max_split]: created by create_new_type func,
newlast[max_split]: created by create_new_type func. */
void
-srfield::create_new_reorder_fields (tree newtype[max_split],
- tree newfields[max_split],
- tree newlast[max_split])
+srfield::create_new_optimized_fields (tree newtype[max_split],
+ tree newfields[max_split],
+ tree newlast[max_split])
{
/* newtype, corresponding to newtype[max_split] in srtype. */
tree nt = NULL_TREE;
@@ -794,7 +794,7 @@ srtype::create_new_type (void)
we are not splitting the struct into two clusters,
then just return false and don't change the type. */
if (!createnewtype && maxclusters == 0
- && current_mode != STRUCT_REORDER_FIELDS)
+ && current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
newtype[0] = type;
return false;
@@ -822,8 +822,8 @@ srtype::create_new_type (void)
sprintf(id, "%d", i);
if (tname)
{
- name = concat (tname, current_mode == STRUCT_REORDER_FIELDS
- ? ".reorder." : ".reorg.", id, NULL);
+ name = concat (tname, current_mode == STRUCT_LAYOUT_OPTIMIZE
+ ? ".slo." : ".reorg.", id, NULL);
TYPE_NAME (newtype[i]) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
get_identifier (name), newtype[i]);
free (name);
@@ -969,8 +969,8 @@ srfunction::create_new_decls (void)
sprintf(id, "%d", j);
if (tname)
{
- name = concat (tname, current_mode == STRUCT_REORDER_FIELDS
- ? ".reorder." : ".reorg.", id, NULL);
+ name = concat (tname, current_mode == STRUCT_LAYOUT_OPTIMIZE
+ ? ".slo." : ".reorg.", id, NULL);
new_name = get_identifier (name);
free (name);
}
@@ -2718,7 +2718,7 @@ escape_type escape_type_volatile_array_or_ptrptr (tree type)
return escape_volatile;
if (isarraytype (type))
return escape_array;
- if (isptrptr (type) && (current_mode != STRUCT_REORDER_FIELDS))
+ if (isptrptr (type) && (current_mode != STRUCT_LAYOUT_OPTIMIZE))
return escape_ptr_ptr;
return does_not_escape;
}
@@ -2740,13 +2740,13 @@ ipa_struct_reorg::record_field_type (tree field, srtype *base_srtype)
field_srtype->add_field_site (field_srfield);
}
if (field_srtype == base_srtype && current_mode != COMPLETE_STRUCT_RELAYOUT
- && current_mode != STRUCT_REORDER_FIELDS)
+ && current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
base_srtype->mark_escape (escape_rescusive_type, NULL);
}
/* Types of non-pointer field are difficult to track the correctness
of the rewrite when it used by the escaped type. */
- if (current_mode == STRUCT_REORDER_FIELDS
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& TREE_CODE (field_type) == RECORD_TYPE)
{
field_srtype->mark_escape (escape_instance_field, NULL);
@@ -2781,7 +2781,7 @@ ipa_struct_reorg::record_struct_field_types (tree base_type,
}
/* Types of non-pointer field are difficult to track the correctness
of the rewrite when it used by the escaped type. */
- if (current_mode == STRUCT_REORDER_FIELDS
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& TREE_CODE (field_type) == RECORD_TYPE)
{
base_srtype->mark_escape (escape_instance_field, NULL);
@@ -2966,7 +2966,7 @@ ipa_struct_reorg::record_var (tree decl, escape_type escapes, int arg)
/* Separate instance is hard to trace in complete struct
relayout optimization. */
if ((current_mode == COMPLETE_STRUCT_RELAYOUT
- || current_mode == STRUCT_REORDER_FIELDS)
+ || current_mode == STRUCT_LAYOUT_OPTIMIZE)
&& TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
{
e = escape_separate_instance;
@@ -3071,7 +3071,7 @@ ipa_struct_reorg::find_vars (gimple *stmt)
/* Add a safe func mechanism. */
bool l_find = true;
bool r_find = true;
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
l_find = !(current_function->is_safe_func
&& TREE_CODE (lhs) == SSA_NAME
@@ -3117,7 +3117,7 @@ ipa_struct_reorg::find_vars (gimple *stmt)
}
}
}
- else if ((current_mode == STRUCT_REORDER_FIELDS)
+ else if ((current_mode == STRUCT_LAYOUT_OPTIMIZE)
&& (gimple_assign_rhs_code (stmt) == LE_EXPR
|| gimple_assign_rhs_code (stmt) == LT_EXPR
|| gimple_assign_rhs_code (stmt) == GE_EXPR
@@ -3128,7 +3128,7 @@ ipa_struct_reorg::find_vars (gimple *stmt)
find_var (gimple_assign_rhs2 (stmt), stmt);
}
/* find void ssa_name from stmt such as: _2 = _1 - old_arcs_1. */
- else if ((current_mode == STRUCT_REORDER_FIELDS)
+ else if ((current_mode == STRUCT_LAYOUT_OPTIMIZE)
&& gimple_assign_rhs_code (stmt) == POINTER_DIFF_EXPR
&& types_compatible_p (
TYPE_MAIN_VARIANT (TREE_TYPE (gimple_assign_rhs1 (stmt))),
@@ -3391,11 +3391,12 @@ is_result_of_mult (tree arg, tree *num, tree struct_size)
arg = gimple_assign_rhs1 (size_def_stmt);
size_def_stmt = SSA_NAME_DEF_STMT (arg);
}
- else if (rhs_code == NEGATE_EXPR && current_mode == STRUCT_REORDER_FIELDS)
+ else if (rhs_code == NEGATE_EXPR
+ && current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
return trace_calculate_negate (size_def_stmt, num, struct_size);
}
- else if (rhs_code == NOP_EXPR && current_mode == STRUCT_REORDER_FIELDS)
+ else if (rhs_code == NOP_EXPR && current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
return trace_calculate_diff (size_def_stmt, num);
}
@@ -3415,7 +3416,7 @@ is_result_of_mult (tree arg, tree *num, tree struct_size)
bool
ipa_struct_reorg::handled_allocation_stmt (gimple *stmt)
{
- if ((current_mode == STRUCT_REORDER_FIELDS)
+ if ((current_mode == STRUCT_LAYOUT_OPTIMIZE)
&& (gimple_call_builtin_p (stmt, BUILT_IN_REALLOC)
|| gimple_call_builtin_p (stmt, BUILT_IN_MALLOC)
|| gimple_call_builtin_p (stmt, BUILT_IN_CALLOC)))
@@ -3548,7 +3549,7 @@ ipa_struct_reorg::maybe_mark_or_record_other_side (tree side, tree other, gimple
/* x_1 = y.x_nodes; void *x;
Directly mark the structure pointer type assigned
to the void* variable as escape. */
- else if (current_mode == STRUCT_REORDER_FIELDS
+ else if (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& TREE_CODE (side) == SSA_NAME
&& VOID_POINTER_P (TREE_TYPE (side))
&& SSA_NAME_VAR (side)
@@ -3815,7 +3816,7 @@ ipa_struct_reorg::get_type_field (tree expr, tree &base, bool &indirect,
and doesn't mark escape follow.). */
/* _1 = MEM[(struct arc_t * *)a_1].
then base a_1: ssa_name - pointer_type - integer_type. */
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
bool is_int_ptr = POINTER_TYPE_P (TREE_TYPE (base))
&& (TREE_CODE (inner_type (TREE_TYPE (base)))
@@ -4031,7 +4032,7 @@ ipa_struct_reorg::maybe_record_call (cgraph_node *node, gcall *stmt)
/* callee_func (_1, _2);
Check the callee func, instead of current func. */
if (!(free_or_realloc
- || (current_mode == STRUCT_REORDER_FIELDS
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& safe_functions.contains (
node->get_edge (stmt)->callee)))
&& VOID_POINTER_P (argtypet))
@@ -4063,9 +4064,9 @@ ipa_struct_reorg::record_stmt_expr (tree expr, cgraph_node *node, gimple *stmt)
realpart, imagpart, address, escape_from_base))
return;
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
- if (!opt_for_fn (current_function_decl, flag_ipa_reorder_fields))
+ if (!opt_for_fn (current_function_decl, flag_ipa_struct_layout))
{
type->mark_escape (escape_non_optimize, stmt);
}
@@ -4287,7 +4288,7 @@ ipa_struct_reorg::check_definition_call (srdecl *decl, vec<srdecl*> &worklist)
check_type_and_push (gimple_call_arg (stmt, 0), decl, worklist, stmt);
}
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
if (!handled_allocation_stmt (stmt))
{
@@ -4341,7 +4342,7 @@ ipa_struct_reorg::check_definition (srdecl *decl, vec<srdecl*> &worklist)
}
return;
}
- if (current_mode == STRUCT_REORDER_FIELDS && SSA_NAME_VAR (ssa_name)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE && SSA_NAME_VAR (ssa_name)
&& VOID_POINTER_P (TREE_TYPE (SSA_NAME_VAR (ssa_name))))
{
type->mark_escape (escape_cast_void, SSA_NAME_DEF_STMT (ssa_name));
@@ -4442,7 +4443,7 @@ ipa_struct_reorg::check_other_side (srdecl *decl, tree other, gimple *stmt, vec<
if (!get_type_field (other, base, indirect, type1, field,
realpart, imagpart, address, escape_from_base))
{
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
/* release INTEGER_TYPE cast to struct pointer. */
bool cast_from_int_ptr = current_function->is_safe_func && base
@@ -4498,7 +4499,7 @@ get_base (tree &base, tree expr)
void
ipa_struct_reorg::check_ptr_layers (tree a_expr, tree b_expr, gimple* stmt)
{
- if (current_mode != STRUCT_REORDER_FIELDS || current_function->is_safe_func
+ if (current_mode != STRUCT_LAYOUT_OPTIMIZE || current_function->is_safe_func
|| !(POINTER_TYPE_P (TREE_TYPE (a_expr)))
|| !(POINTER_TYPE_P (TREE_TYPE (b_expr)))
|| !handled_type (TREE_TYPE (a_expr))
@@ -4579,7 +4580,7 @@ ipa_struct_reorg::check_use (srdecl *decl, gimple *stmt, vec<srdecl*> &worklist)
&& (code != EQ_EXPR && code != NE_EXPR
&& code != LT_EXPR && code != LE_EXPR
&& code != GT_EXPR && code != GE_EXPR))
- || (current_mode == STRUCT_REORDER_FIELDS
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& (code != EQ_EXPR && code != NE_EXPR
&& code != LT_EXPR && code != LE_EXPR
&& code != GT_EXPR && code != GE_EXPR)))
@@ -4618,7 +4619,7 @@ ipa_struct_reorg::check_use (srdecl *decl, gimple *stmt, vec<srdecl*> &worklist)
&& (code != EQ_EXPR && code != NE_EXPR
&& code != LT_EXPR && code != LE_EXPR
&& code != GT_EXPR && code != GE_EXPR))
- || (current_mode == STRUCT_REORDER_FIELDS
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& (code != EQ_EXPR && code != NE_EXPR
&& code != LT_EXPR && code != LE_EXPR
&& code != GT_EXPR && code != GE_EXPR)))
@@ -4740,11 +4741,11 @@ ipa_struct_reorg::record_function (cgraph_node *node)
escapes = escape_marked_as_used;
else if (!node->local)
{
- if (current_mode != STRUCT_REORDER_FIELDS)
+ if (current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
escapes = escape_visible_function;
}
- if (current_mode == STRUCT_REORDER_FIELDS && node->externally_visible)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE && node->externally_visible)
{
escapes = escape_visible_function;
}
@@ -4754,9 +4755,9 @@ ipa_struct_reorg::record_function (cgraph_node *node)
else if (!tree_versionable_function_p (node->decl))
escapes = escape_noclonable_function;
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
- if (!opt_for_fn (node->decl, flag_ipa_reorder_fields))
+ if (!opt_for_fn (node->decl, flag_ipa_struct_layout))
{
escapes = escape_non_optimize;
}
@@ -4773,7 +4774,7 @@ ipa_struct_reorg::record_function (cgraph_node *node)
gimple_stmt_iterator si;
/* Add a safe func mechanism. */
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
current_function->is_safe_func = safe_functions.contains (node);
if (dump_file)
@@ -4989,7 +4990,7 @@ ipa_struct_reorg::record_accesses (void)
}
/* Add a safe func mechanism. */
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
record_safe_func_with_void_ptr_parm ();
}
@@ -5188,7 +5189,7 @@ void
ipa_struct_reorg::prune_escaped_types (void)
{
if (current_mode != COMPLETE_STRUCT_RELAYOUT
- && current_mode != STRUCT_REORDER_FIELDS)
+ && current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
/* Detect recusive types and mark them as escaping. */
detect_cycles ();
@@ -5196,7 +5197,7 @@ ipa_struct_reorg::prune_escaped_types (void)
mark them as escaping. */
propagate_escape ();
}
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
propagate_escape_via_original ();
propagate_escape_via_empty_with_no_original ();
@@ -5256,7 +5257,7 @@ ipa_struct_reorg::prune_escaped_types (void)
if (function->args.is_empty ()
&& function->decls.is_empty ()
&& function->globals.is_empty ()
- && current_mode != STRUCT_REORDER_FIELDS)
+ && current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
delete function;
functions.ordered_remove (i);
@@ -5281,10 +5282,10 @@ ipa_struct_reorg::prune_escaped_types (void)
/* Prune types that escape, all references to those types
will have been removed in the above loops. */
- /* The escape type is not deleted in STRUCT_REORDER_FIELDS,
+ /* The escape type is not deleted in STRUCT_LAYOUT_OPTIMIZE,
Then the type that contains the escaped type fields
can find complete information. */
- if (current_mode != STRUCT_REORDER_FIELDS)
+ if (current_mode != STRUCT_LAYOUT_OPTIMIZE)
{
for (unsigned i = 0; i < types.length ();)
{
@@ -5334,7 +5335,7 @@ ipa_struct_reorg::create_new_types (void)
for (unsigned i = 0; i < types.length (); i++)
newtypes += types[i]->create_new_type ();
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
for (unsigned i = 0; i < types.length (); i++)
{
@@ -5458,8 +5459,8 @@ ipa_struct_reorg::create_new_args (cgraph_node *new_node)
char *name = NULL;
if (tname)
{
- name = concat (tname, current_mode == STRUCT_REORDER_FIELDS
- ? ".reorder.0" : ".reorg.0", NULL);
+ name = concat (tname, current_mode == STRUCT_LAYOUT_OPTIMIZE
+ ? ".slo.0" : ".reorg.0", NULL);
new_name = get_identifier (name);
free (name);
}
@@ -5547,8 +5548,8 @@ ipa_struct_reorg::create_new_functions (void)
statistics_counter_event (NULL, "Create new function", 1);
new_node = node->create_version_clone_with_body (
vNULL, NULL, NULL, NULL, NULL,
- current_mode == STRUCT_REORDER_FIELDS
- ? "struct_reorder" : "struct_reorg");
+ current_mode == STRUCT_LAYOUT_OPTIMIZE
+ ? "slo" : "struct_reorg");
new_node->can_change_signature = node->can_change_signature;
new_node->make_local ();
f->newnode = new_node;
@@ -5666,13 +5667,13 @@ ipa_struct_reorg::rewrite_expr (tree expr, tree newexpr[max_split], bool ignore_
newbase1 = build_fold_addr_expr (newbase1);
if (indirect)
{
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
/* Supports the MEM_REF offset.
_1 = MEM[(struct arc *)ap_1 + 72B].flow;
- Old rewrite: _1 = ap.reorder.0_8->flow;
+ Old rewrite: _1 = ap.slo.0_8->flow;
New rewrite: _1
- = MEM[(struct arc.reorder.0 *)ap.reorder.0_8 + 64B].flow;
+ = MEM[(struct arc.slo.0 *)ap.slo.0_8 + 64B].flow;
*/
HOST_WIDE_INT offset_tmp = 0;
HOST_WIDE_INT mem_offset = 0;
@@ -5738,10 +5739,10 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi)
return remove;
}
- if ((current_mode != STRUCT_REORDER_FIELDS
+ if ((current_mode != STRUCT_LAYOUT_OPTIMIZE
&& (gimple_assign_rhs_code (stmt) == EQ_EXPR
|| gimple_assign_rhs_code (stmt) == NE_EXPR))
- || (current_mode == STRUCT_REORDER_FIELDS
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt))
== tcc_comparison)))
{
@@ -5751,7 +5752,7 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi)
tree newrhs2[max_split];
tree_code rhs_code = gimple_assign_rhs_code (stmt);
tree_code code = rhs_code == EQ_EXPR ? BIT_AND_EXPR : BIT_IOR_EXPR;
- if (current_mode == STRUCT_REORDER_FIELDS
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& rhs_code != EQ_EXPR && rhs_code != NE_EXPR)
{
code = rhs_code;
@@ -5798,8 +5799,8 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi)
_6 = _4 + _5;
_5 = (long unsigned int) _3;
_3 = _1 - old_2. */
- if (current_mode != STRUCT_REORDER_FIELDS
- || (current_mode == STRUCT_REORDER_FIELDS && (num != NULL)))
+ if (current_mode != STRUCT_LAYOUT_OPTIMIZE
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE && (num != NULL)))
{
num = gimplify_build1 (gsi, NOP_EXPR, sizetype, num);
}
@@ -5827,7 +5828,7 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi)
}
/* Support POINTER_DIFF_EXPR rewriting. */
- if (current_mode == STRUCT_REORDER_FIELDS
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& gimple_assign_rhs_code (stmt) == POINTER_DIFF_EXPR)
{
tree rhs1 = gimple_assign_rhs1 (stmt);
@@ -6014,7 +6015,7 @@ ipa_struct_reorg::rewrite_call (gcall *stmt, gimple_stmt_iterator *gsi)
srfunction *f = find_function (node);
/* Add a safe func mechanism. */
- if (current_mode == STRUCT_REORDER_FIELDS && f && f->is_safe_func)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE && f && f->is_safe_func)
{
tree expr = gimple_call_arg (stmt, 0);
tree newexpr[max_split];
@@ -6141,9 +6142,9 @@ ipa_struct_reorg::rewrite_cond (gcond *stmt, gimple_stmt_iterator *gsi)
tree_code rhs_code = gimple_cond_code (stmt);
/* Handle only equals or not equals conditionals. */
- if ((current_mode != STRUCT_REORDER_FIELDS
+ if ((current_mode != STRUCT_LAYOUT_OPTIMIZE
&& (rhs_code != EQ_EXPR && rhs_code != NE_EXPR))
- || (current_mode == STRUCT_REORDER_FIELDS
+ || (current_mode == STRUCT_LAYOUT_OPTIMIZE
&& TREE_CODE_CLASS (rhs_code) != tcc_comparison))
return false;
tree lhs = gimple_cond_lhs (stmt);
@@ -6171,10 +6172,10 @@ ipa_struct_reorg::rewrite_cond (gcond *stmt, gimple_stmt_iterator *gsi)
}
/* Old rewrite: if (x_1 != 0B)
- -> _1 = x.reorder.0_1 != 0B; if (_1 != 1)
+ -> _1 = x.slo.0_1 != 0B; if (_1 != 1)
The logic is incorrect.
New rewrite: if (x_1 != 0B)
- -> if (x.reorder.0_1 != 0B)*/
+ -> if (x.slo.0_1 != 0B)*/
for (unsigned i = 0; i < max_split && (newlhs[i] || newrhs[i]); i++)
{
if (newlhs[i])
@@ -6203,7 +6204,7 @@ ipa_struct_reorg::rewrite_cond (gcond *stmt, gimple_stmt_iterator *gsi)
bool
ipa_struct_reorg::rewrite_debug (gimple *stmt, gimple_stmt_iterator *)
{
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
/* Delete debug gimple now. */
return true;
@@ -6367,7 +6368,7 @@ ipa_struct_reorg::rewrite_functions (void)
then don't rewrite any accesses. */
if (!create_new_types ())
{
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
for (unsigned i = 0; i < functions.length (); i++)
{
@@ -6386,7 +6387,7 @@ ipa_struct_reorg::rewrite_functions (void)
return 0;
}
- if (current_mode == STRUCT_REORDER_FIELDS && dump_file)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE && dump_file)
{
fprintf (dump_file, "=========== all created newtypes: ===========\n\n");
dump_newtypes (dump_file);
@@ -6396,13 +6397,13 @@ ipa_struct_reorg::rewrite_functions (void)
{
retval = TODO_remove_functions;
create_new_functions ();
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
prune_escaped_types ();
}
}
- if (current_mode == STRUCT_REORDER_FIELDS)
+ if (current_mode == STRUCT_LAYOUT_OPTIMIZE)
{
for (unsigned i = 0; i < functions.length (); i++)
{
@@ -6572,7 +6573,7 @@ ipa_struct_reorg::execute (enum srmode mode)
{
unsigned int ret = 0;
- if (mode == NORMAL || mode == STRUCT_REORDER_FIELDS)
+ if (mode == NORMAL || mode == STRUCT_LAYOUT_OPTIMIZE)
{
current_mode = mode;
/* If there is a top-level inline-asm,
@@ -6660,12 +6661,12 @@ pass_ipa_struct_reorg::gate (function *)
&& (in_lto_p || flag_whole_program));
}
-const pass_data pass_data_ipa_reorder_fields =
+const pass_data pass_data_ipa_struct_layout =
{
SIMPLE_IPA_PASS, // type
- "reorder_fields", // name
+ "struct_layout", // name
OPTGROUP_NONE, // optinfo_flags
- TV_IPA_REORDER_FIELDS, // tv_id
+ TV_IPA_STRUCT_LAYOUT, // tv_id
0, // properties_required
0, // properties_provided
0, // properties_destroyed
@@ -6673,11 +6674,11 @@ const pass_data pass_data_ipa_reorder_fields =
0, // todo_flags_finish
};
-class pass_ipa_reorder_fields : public simple_ipa_opt_pass
+class pass_ipa_struct_layout : public simple_ipa_opt_pass
{
public:
- pass_ipa_reorder_fields (gcc::context *ctxt)
- : simple_ipa_opt_pass (pass_data_ipa_reorder_fields, ctxt)
+ pass_ipa_struct_layout (gcc::context *ctxt)
+ : simple_ipa_opt_pass (pass_data_ipa_struct_layout, ctxt)
{}
/* opt_pass methods: */
@@ -6685,17 +6686,17 @@ public:
virtual unsigned int execute (function *)
{
unsigned int ret = 0;
- ret = ipa_struct_reorg ().execute (STRUCT_REORDER_FIELDS);
+ ret = ipa_struct_reorg ().execute (STRUCT_LAYOUT_OPTIMIZE);
return ret;
}
-}; // class pass_ipa_reorder_fields
+}; // class pass_ipa_struct_layout
bool
-pass_ipa_reorder_fields::gate (function *)
+pass_ipa_struct_layout::gate (function *)
{
return (optimize >= 3
- && flag_ipa_reorder_fields
+ && flag_ipa_struct_layout
/* Don't bother doing anything if the program has errors. */
&& !seen_error ()
&& flag_lto_partition == LTO_PARTITION_ONE
@@ -6715,7 +6716,7 @@ make_pass_ipa_struct_reorg (gcc::context *ctxt)
}
simple_ipa_opt_pass *
-make_pass_ipa_reorder_fields (gcc::context *ctxt)
+make_pass_ipa_struct_layout (gcc::context *ctxt)
{
- return new pass_ipa_reorder_fields (ctxt);
+ return new pass_ipa_struct_layout (ctxt);
}
diff --git a/gcc/ipa-struct-reorg/ipa-struct-reorg.h b/gcc/ipa-struct-reorg/ipa-struct-reorg.h
index 8fb6ce9c4..54b0dc655 100644
--- a/gcc/ipa-struct-reorg/ipa-struct-reorg.h
+++ b/gcc/ipa-struct-reorg/ipa-struct-reorg.h
@@ -187,7 +187,7 @@ struct srfield
tree newlast[max_split]);
void reorder_fields (tree newfields[max_split], tree newlast[max_split],
tree &field);
- void create_new_reorder_fields (tree newtype[max_split],
+ void create_new_optimized_fields (tree newtype[max_split],
tree newfields[max_split],
tree newlast[max_split]);
};
diff --git a/gcc/opts.c b/gcc/opts.c
index 479d726df..c3877c24e 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -2695,6 +2695,18 @@ common_handle_option (struct gcc_options *opts,
}
break;
+ case OPT_fipa_struct_reorg_:
+ opts->x_struct_layout_optimize_level = value;
+ if (value > 1)
+ {
+ SET_OPTION_IF_UNSET (opts, opts_set, flag_ipa_struct_layout, value);
+ }
+ /* No break here - do -fipa-struct-reorg processing. */
+ /* FALLTHRU. */
+ case OPT_fipa_struct_reorg:
+ opts->x_flag_ipa_struct_reorg = value;
+ break;
+
case OPT_fprofile_generate_:
opts->x_profile_data_prefix = xstrdup (arg);
value = true;
diff --git a/gcc/passes.def b/gcc/passes.def
index e9c91d26e..eea4d7808 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -174,7 +174,7 @@ along with GCC; see the file COPYING3. If not see
INSERT_PASSES_AFTER (all_late_ipa_passes)
NEXT_PASS (pass_materialize_all_clones);
NEXT_PASS (pass_ipa_pta);
- NEXT_PASS (pass_ipa_reorder_fields);
+ NEXT_PASS (pass_ipa_struct_layout);
/* FIXME: this should a normal IP pass */
NEXT_PASS (pass_ipa_struct_reorg);
NEXT_PASS (pass_omp_simd_clone);
diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h
index ddf5e3577..f62222a96 100644
--- a/gcc/symbol-summary.h
+++ b/gcc/symbol-summary.h
@@ -61,7 +61,7 @@ protected:
{
/* In structure optimizatons, we call new to ensure that
the allocated memory is initialized to 0. */
- if (flag_ipa_reorder_fields || flag_ipa_struct_reorg)
+ if (flag_ipa_struct_layout || flag_ipa_struct_reorg)
return is_ggc () ? new (ggc_internal_alloc (sizeof (T))) T ()
: new T ();
/* Call gcc_internal_because we do not want to call finalizer for
@@ -77,7 +77,7 @@ protected:
ggc_delete (item);
else
{
- if (flag_ipa_reorder_fields || flag_ipa_struct_reorg)
+ if (flag_ipa_struct_layout || flag_ipa_struct_reorg)
delete item;
else
m_allocator.remove (item);
diff --git a/gcc/testsuite/gcc.dg/struct/rf_DTE_struct_instance_field.c b/gcc/testsuite/gcc.dg/struct/rf_DTE_struct_instance_field.c
index b95be2dab..882a695b0 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_DTE_struct_instance_field.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_DTE_struct_instance_field.c
@@ -72,4 +72,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "No structures to transform." "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "No structures to transform." "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_DTE_verify.c b/gcc/testsuite/gcc.dg/struct/rf_DTE_verify.c
index 3d243313b..20ecee545 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_DTE_verify.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_DTE_verify.c
@@ -91,4 +91,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_check_ptr_layers_bug.c b/gcc/testsuite/gcc.dg/struct/rf_check_ptr_layers_bug.c
index a5477dcc9..ad879fc11 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_check_ptr_layers_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_check_ptr_layers_bug.c
@@ -21,4 +21,4 @@ main()
{
g();
}
-/* { dg-final { scan-ipa-dump "No structures to transform." "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "No structures to transform." "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_create_fields_bug.c b/gcc/testsuite/gcc.dg/struct/rf_create_fields_bug.c
index 886706ae9..f0c9d8f39 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_create_fields_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_create_fields_bug.c
@@ -79,4 +79,4 @@ main()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_create_new_func_bug.c b/gcc/testsuite/gcc.dg/struct/rf_create_new_func_bug.c
index f3785f392..fa5e6c2d0 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_create_new_func_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_create_new_func_bug.c
@@ -53,4 +53,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ele_minus_verify.c b/gcc/testsuite/gcc.dg/struct/rf_ele_minus_verify.c
index 1415d759a..2966869e7 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ele_minus_verify.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ele_minus_verify.c
@@ -57,4 +57,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_escape_by_base.c b/gcc/testsuite/gcc.dg/struct/rf_escape_by_base.c
index 003da0b57..b74b9e5e9 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_escape_by_base.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_escape_by_base.c
@@ -80,4 +80,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_int_cast_ptr.c b/gcc/testsuite/gcc.dg/struct/rf_int_cast_ptr.c
index 10dcf098c..cf85c6109 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_int_cast_ptr.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_int_cast_ptr.c
@@ -69,4 +69,4 @@ main()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_mem_ref_offset.c b/gcc/testsuite/gcc.dg/struct/rf_mem_ref_offset.c
index 8d1a9a114..61fd9f755 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_mem_ref_offset.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_mem_ref_offset.c
@@ -55,4 +55,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_mul_layer_ptr_record_bug.c b/gcc/testsuite/gcc.dg/struct/rf_mul_layer_ptr_record_bug.c
index 23765fc56..2c115da02 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_mul_layer_ptr_record_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_mul_layer_ptr_record_bug.c
@@ -27,4 +27,4 @@ main() {
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_pass_conflict.c b/gcc/testsuite/gcc.dg/struct/rf_pass_conflict.c
index 54e737ee8..c7646d8b7 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_pass_conflict.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_pass_conflict.c
@@ -106,4 +106,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr2void_lto.c b/gcc/testsuite/gcc.dg/struct/rf_ptr2void_lto.c
index 2ae46fb31..01c000375 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr2void_lto.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr2void_lto.c
@@ -84,4 +84,4 @@ main ()
return cnt;
}
-/* { dg-final { scan-ipa-dump "No structures to transform." "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "No structures to transform." "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr_diff.c b/gcc/testsuite/gcc.dg/struct/rf_ptr_diff.c
index 3a3c10b70..f962163fe 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr_diff.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr_diff.c
@@ -68,4 +68,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr_negate_expr.c b/gcc/testsuite/gcc.dg/struct/rf_ptr_negate_expr.c
index 7b7d110df..6558b1797 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr_negate_expr.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr_negate_expr.c
@@ -52,4 +52,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr_offset.c b/gcc/testsuite/gcc.dg/struct/rf_ptr_offset.c
index 317aafa5f..6d528ed5b 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr_offset.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr_offset.c
@@ -31,4 +31,4 @@ main ()
printf (" Tree.\n");
}
-/* { dg-final { scan-ipa-dump "No structures to transform." "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "No structures to transform." "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr.c b/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr.c
index 01a33f669..e95cf2e5d 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr.c
@@ -52,4 +52,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr_ptr.c b/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr_ptr.c
index a38556533..cb4054522 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr_ptr.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_ptr_ptr_ptr.c
@@ -55,4 +55,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_rescusive_type.c b/gcc/testsuite/gcc.dg/struct/rf_rescusive_type.c
index 5c17ee528..38bddbae5 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_rescusive_type.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_rescusive_type.c
@@ -54,4 +54,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_rewrite_assign_more_cmp.c b/gcc/testsuite/gcc.dg/struct/rf_rewrite_assign_more_cmp.c
index 710517ee9..86034f042 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_rewrite_assign_more_cmp.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_rewrite_assign_more_cmp.c
@@ -62,4 +62,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_bug.c b/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_bug.c
index 6ed0a5d2d..aae7c4bc9 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_bug.c
@@ -69,4 +69,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_more_cmp.c b/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_more_cmp.c
index 5a2dd964f..8672e7552 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_more_cmp.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_rewrite_cond_more_cmp.c
@@ -55,4 +55,4 @@ main()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_rewrite_phi_bug.c b/gcc/testsuite/gcc.dg/struct/rf_rewrite_phi_bug.c
index faa90b42d..2d67434a0 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_rewrite_phi_bug.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_rewrite_phi_bug.c
@@ -78,4 +78,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 3" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_visible_func.c b/gcc/testsuite/gcc.dg/struct/rf_visible_func.c
index 8f2da99cc..a8cf2b63c 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_visible_func.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_visible_func.c
@@ -89,4 +89,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/rf_void_ptr_param_func.c b/gcc/testsuite/gcc.dg/struct/rf_void_ptr_param_func.c
index 723142c59..b6cba3c34 100644
--- a/gcc/testsuite/gcc.dg/struct/rf_void_ptr_param_func.c
+++ b/gcc/testsuite/gcc.dg/struct/rf_void_ptr_param_func.c
@@ -51,4 +51,4 @@ main()
return 0;
}
-/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "reorder_fields" } } */
\ No newline at end of file
+/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "struct_layout" } } */
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.dg/struct/sr_pointer_minus.c b/gcc/testsuite/gcc.dg/struct/sr_pointer_minus.c
index 9a82da0d6..a0614a1ba 100644
--- a/gcc/testsuite/gcc.dg/struct/sr_pointer_minus.c
+++ b/gcc/testsuite/gcc.dg/struct/sr_pointer_minus.c
@@ -30,4 +30,4 @@ main ()
return 0;
}
-/* { dg-final { scan-ipa-dump "struct node has escaped: \"Type escapes via a unhandled rewrite stmt\"" "struct_reorg" } } */
+/* { dg-final { scan-ipa-dump "has escaped: \"Type escapes via a unhandled rewrite stmt\"" "struct_reorg" } } */
diff --git a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp b/gcc/testsuite/gcc.dg/struct/struct-reorg.exp
index c8db4675f..67b3ac2d5 100644
--- a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp
+++ b/gcc/testsuite/gcc.dg/struct/struct-reorg.exp
@@ -47,6 +47,25 @@ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/complete_struct_relayout
gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/rf*.c]] \
"" "-fipa-reorder-fields -fdump-ipa-all -flto-partition=one -fwhole-program"
+# -fipa-struct-reorg=1
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/wo_prof_*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/w_ratio_*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/w_prof_*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/struct_reorg*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/sr_*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/csr_*.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/complete_struct_relayout.c]] \
+ "" "-fipa-struct-reorg=1 -fdump-ipa-all -flto-partition=one -fwhole-program"
+
+# -fipa-struct-reorg=2
+gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] \
+ "" "-fipa-struct-reorg=2 -fdump-ipa-all -flto-partition=one -fwhole-program"
# All done.
torture-finish
dg-finish
diff --git a/gcc/timevar.def b/gcc/timevar.def
index e873747a8..b179f62bb 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -80,7 +80,7 @@ DEFTIMEVAR (TV_IPA_CONSTANT_PROP , "ipa cp")
DEFTIMEVAR (TV_IPA_INLINING , "ipa inlining heuristics")
DEFTIMEVAR (TV_IPA_FNSPLIT , "ipa function splitting")
DEFTIMEVAR (TV_IPA_COMDATS , "ipa comdats")
-DEFTIMEVAR (TV_IPA_REORDER_FIELDS , "ipa struct reorder fields optimization")
+DEFTIMEVAR (TV_IPA_STRUCT_LAYOUT , "ipa struct layout optimization")
DEFTIMEVAR (TV_IPA_STRUCT_REORG , "ipa struct reorg optimization")
DEFTIMEVAR (TV_IPA_EXTEND_AUTO_PROFILE, "ipa extend auto profile")
DEFTIMEVAR (TV_IPA_OPT , "ipa various optimizations")
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index be6387768..187f1a85c 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -509,7 +509,7 @@ extern ipa_opt_pass_d *make_pass_ipa_odr (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_reference (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_hsa (gcc::context *ctxt);
extern ipa_opt_pass_d *make_pass_ipa_pure_const (gcc::context *ctxt);
-extern simple_ipa_opt_pass *make_pass_ipa_reorder_fields (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_struct_layout (gcc::context *ctxt);
extern simple_ipa_opt_pass *make_pass_ipa_struct_reorg (gcc::context *ctxt);
extern simple_ipa_opt_pass *make_pass_ipa_extend_auto_profile (gcc::context
*ctxt);
diff --git a/gcc/tree.c b/gcc/tree.c
index 89fa469c3..c2075d735 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5219,7 +5219,7 @@ fld_simplified_type_name (tree type)
/* Simplify type will cause that struct A and struct A within
struct B are different type pointers, so skip it in structure
optimizations. */
- if (flag_ipa_reorder_fields || flag_ipa_struct_reorg)
+ if (flag_ipa_struct_layout || flag_ipa_struct_reorg)
return TYPE_NAME (type);
if (!TYPE_NAME (type) || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL)
@@ -5463,7 +5463,7 @@ fld_simplified_type (tree t, class free_lang_data_d *fld)
/* Simplify type will cause that struct A and struct A within
struct B are different type pointers, so skip it in structure
optimizations. */
- if (flag_ipa_reorder_fields || flag_ipa_struct_reorg)
+ if (flag_ipa_struct_layout || flag_ipa_struct_reorg)
return t;
if (POINTER_TYPE_P (t))
return fld_incomplete_type_of (t, fld);
--
2.27.0.windows.1