Projects
openEuler:24.03:SP1:Everything:64G
gcc
_service:tar_scm:0024-Struct-Reorg-Refactoring-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:0024-Struct-Reorg-Refactoring-and-merge-reorder-fields-in.patch of Package gcc
From 535d00d764c38e70c563ac59e702a20e3b744a95 Mon Sep 17 00:00:00 2001 From: liyancheng <412998149@qq.com> Date: Tue, 29 Aug 2023 19:18:21 +0800 Subject: [PATCH] [Struct Reorg] Refactoring and merge reorder fields into struct reorg optimization Merge reorder_fields pass into struct_reorg pass. Using flag -fipa-struct-reorg=[0,1,2,3] to enable none, strcut reorg, reorder fields and dfe optimizations. --- gcc/gimple-ssa-warn-access.cc | 2 +- gcc/ipa-free-lang-data.cc | 9 +- gcc/ipa-struct-reorg/ipa-struct-reorg.cc | 353 ++++++++---------- gcc/passes.def | 1 - gcc/symbol-summary.h | 4 +- gcc/testsuite/gcc.dg/struct/dfe_DTE_verify.c | 2 +- .../gcc.dg/struct/dfe_ele_minus_verify.c | 2 +- .../gcc.dg/struct/dfe_extr_board_init.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_extr_claw.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_extr_dtrace.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_extr_gc.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_extr_hpsa.c | 2 +- .../gcc.dg/struct/dfe_extr_mv_udc_core.c | 2 +- .../gcc.dg/struct/dfe_extr_tcp_usrreq.c | 2 +- .../gcc.dg/struct/dfe_extr_ui_main.c | 2 +- .../gcc.dg/struct/dfe_mem_ref_offset.c | 2 +- .../struct/dfe_mul_layer_ptr_record_bug.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_ptr_diff.c | 2 +- .../gcc.dg/struct/dfe_ptr_negate_expr.c | 2 +- gcc/testsuite/gcc.dg/struct/dfe_ptr_ptr.c | 2 +- .../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.dg/struct/rf_external_func_types.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/testsuite/gcc.dg/struct/struct-reorg.exp | 2 +- gcc/timevar.def | 1 - gcc/tree-pass.h | 1 - 48 files changed, 201 insertions(+), 252 deletions(-) diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc index 7f5c92c96..a24645783 100644 --- a/gcc/gimple-ssa-warn-access.cc +++ b/gcc/gimple-ssa-warn-access.cc @@ -2198,7 +2198,7 @@ pass_waccess::gate (function *) In pass waccess, it will traverse all SSA and cause ICE when handling these unused SSA. So temporarily disable pass waccess when enable structure optimizations. */ - if (flag_ipa_struct_reorg || flag_ipa_reorder_fields) + if (flag_ipa_struct_reorg) return false; return (warn_free_nonheap_object diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc index a88381ddb..801e95cea 100644 --- a/gcc/ipa-free-lang-data.cc +++ b/gcc/ipa-free-lang-data.cc @@ -49,6 +49,9 @@ #include "except.h" #include "ipa-utils.h" +/* Check whether in C language or LTO with only C language. */ +extern bool lang_c_p (void); + namespace { /* Data used when collecting DECLs and TYPEs for language data removal. */ @@ -105,7 +108,8 @@ 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_struct_reorg || flag_ipa_reorder_fields) + if (flag_ipa_struct_reorg && lang_c_p () + && flag_lto_partition == LTO_PARTITION_ONE) return TYPE_NAME (type); if (!TYPE_NAME (type) || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL) @@ -349,7 +353,8 @@ 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_struct_reorg || flag_ipa_reorder_fields) + if (flag_ipa_struct_reorg && lang_c_p () + && flag_lto_partition == LTO_PARTITION_ONE) return t; if (POINTER_TYPE_P (t)) return fld_incomplete_type_of (t, fld); diff --git a/gcc/ipa-struct-reorg/ipa-struct-reorg.cc b/gcc/ipa-struct-reorg/ipa-struct-reorg.cc index eac5fac7e..dcc6df496 100644 --- a/gcc/ipa-struct-reorg/ipa-struct-reorg.cc +++ b/gcc/ipa-struct-reorg/ipa-struct-reorg.cc @@ -108,6 +108,37 @@ along with GCC; see the file COPYING3. If not see #include "cfgloop.h" #include "langhooks.h" +/* Check whether in C language or LTO with only C language. */ + +bool +lang_c_p (void) +{ + const char *language_string = lang_hooks.name; + + if (!language_string) + return false; + + if (lang_GNU_C ()) + return true; + else if (strcmp (language_string, "GNU GIMPLE") == 0) // for LTO check + { + unsigned i = 0; + tree t = NULL_TREE; + + FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t) + { + language_string = TRANSLATION_UNIT_LANGUAGE (t); + if (language_string == NULL + || strncmp (language_string, "GNU C", 5) + || (language_string[5] != '\0' + && !(ISDIGIT (language_string[5])))) + return false; + } + return true; + } + return false; +} + namespace { using namespace struct_reorg; @@ -198,37 +229,6 @@ gimplify_build1 (gimple_stmt_iterator *gsi, enum tree_code code, tree type, GSI_SAME_STMT); } -/* Check whether in C language or LTO with only C language. */ - -static bool -lang_c_p (void) -{ - const char *language_string = lang_hooks.name; - - if (!language_string) - return false; - - if (lang_GNU_C ()) - return true; - else if (strcmp (language_string, "GNU GIMPLE") == 0) // For LTO check - { - unsigned i = 0; - tree t = NULL_TREE; - - FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t) - { - language_string = TRANSLATION_UNIT_LANGUAGE (t); - if (language_string == NULL - || strncmp (language_string, "GNU C", 5) - || (language_string[5] != '\0' - && !(ISDIGIT (language_string[5])))) - return false; - } - return true; - } - return false; -} - /* Get the number of pointer layers. */ int @@ -262,29 +262,23 @@ is_from_void_ptr_parm (tree ssa_name) && VOID_POINTER_P (TREE_TYPE (ssa_name))); } -enum srmode -{ - NORMAL = 0, - COMPLETE_STRUCT_RELAYOUT, - STRUCT_REORDER_FIELDS -}; - /* Enum the struct layout optimize level, which should be the same as the option -fstruct-reorg=. */ enum struct_layout_opt_level { NONE = 0, - STRUCT_REORG, - STRUCT_REORDER_FIELDS_SLO, - DEAD_FIELD_ELIMINATION + STRUCT_SPLIT = 1 << 0, + COMPLETE_STRUCT_RELAYOUT = 1 << 1, + STRUCT_REORDER_FIELDS = 1 << 2, + DEAD_FIELD_ELIMINATION = 1 << 3 }; static bool is_result_of_mult (tree arg, tree *num, tree struct_size); static bool isptrptr (tree type); void get_base (tree &base, tree expr); -srmode current_mode; +static unsigned int current_layout_opt_level; hash_map<tree, tree> replace_type_map; /* Return true if one of these types is created by struct-reorg. */ @@ -626,7 +620,7 @@ void srtype::simple_dump (FILE *f) { print_generic_expr (f, type); - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) fprintf (f, "(%d)", TYPE_UID (type)); } @@ -673,7 +667,7 @@ srfield::create_new_fields (tree newtype[max_split], tree newfields[max_split], tree newlast[max_split]) { - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { create_new_reorder_fields (newtype, newfields, newlast); return; @@ -861,7 +855,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_layout_opt_level < STRUCT_REORDER_FIELDS) { newtype[0] = type; return false; @@ -889,8 +883,7 @@ 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, ".reorg.", id, NULL); TYPE_NAME (newtype[i]) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier (name), @@ -902,8 +895,7 @@ srtype::create_new_type (void) for (unsigned i = 0; i < fields.length (); i++) { srfield *f = fields[i]; - if (current_mode == STRUCT_REORDER_FIELDS - && struct_layout_optimize_level >= DEAD_FIELD_ELIMINATION + if (current_layout_opt_level & DEAD_FIELD_ELIMINATION && !(f->field_access & READ_FIELD)) continue; f->create_new_fields (newtype, newfields, newlast); @@ -924,13 +916,12 @@ srtype::create_new_type (void) warn_padded = save_warn_padded; - if (current_mode == STRUCT_REORDER_FIELDS + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS && replace_type_map.get (this->newtype[0]) == NULL) replace_type_map.put (this->newtype[0], this->type); if (dump_file) { - if (current_mode == STRUCT_REORDER_FIELDS - && struct_layout_optimize_level >= DEAD_FIELD_ELIMINATION + if (current_layout_opt_level & DEAD_FIELD_ELIMINATION && has_dead_field ()) fprintf (dump_file, "Dead field elimination.\n"); } @@ -1052,8 +1043,7 @@ 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, ".reorg.", id, NULL); new_name = get_identifier (name); free (name); } @@ -1264,7 +1254,7 @@ public: bool done_recording; // Methods - unsigned execute (enum srmode mode); + unsigned execute (unsigned int opt); void mark_type_as_escape (tree type, escape_type escapes, gimple *stmt = NULL); @@ -2651,7 +2641,7 @@ 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_layout_opt_level < STRUCT_REORDER_FIELDS)) return escape_ptr_ptr; return does_not_escape; } @@ -2672,12 +2662,11 @@ ipa_struct_reorg::record_field_type (tree field, srtype *base_srtype) field_srfield->type = field_srtype; field_srtype->add_field_site (field_srfield); } - if (field_srtype == base_srtype && current_mode != COMPLETE_STRUCT_RELAYOUT - && current_mode != STRUCT_REORDER_FIELDS) + if (field_srtype == base_srtype && current_layout_opt_level == STRUCT_SPLIT) 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_layout_opt_level >= STRUCT_REORDER_FIELDS && TREE_CODE (field_type) == RECORD_TYPE) field_srtype->mark_escape (escape_instance_field, NULL); } @@ -2704,7 +2693,7 @@ ipa_struct_reorg::record_struct_field_types (tree base_type, base_srtype->mark_escape (e, 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_layout_opt_level >= STRUCT_REORDER_FIELDS && TREE_CODE (field_type) == RECORD_TYPE) base_srtype->mark_escape (escape_instance_field, NULL); if (handled_type (field_type)) @@ -2895,8 +2884,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) + if (current_layout_opt_level >= COMPLETE_STRUCT_RELAYOUT && TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE) e = escape_separate_instance; @@ -3000,7 +2988,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_layout_opt_level >= STRUCT_REORDER_FIELDS) { l_find = !(current_function->is_safe_func && TREE_CODE (lhs) == SSA_NAME @@ -3046,7 +3034,7 @@ ipa_struct_reorg::find_vars (gimple *stmt) } } } - else if ((current_mode == STRUCT_REORDER_FIELDS) + else if ((current_layout_opt_level >= STRUCT_REORDER_FIELDS) && (gimple_assign_rhs_code (stmt) == LE_EXPR || gimple_assign_rhs_code (stmt) == LT_EXPR || gimple_assign_rhs_code (stmt) == GE_EXPR @@ -3057,7 +3045,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_layout_opt_level >= STRUCT_REORDER_FIELDS) && gimple_assign_rhs_code (stmt) == POINTER_DIFF_EXPR && types_compatible_p ( TYPE_MAIN_VARIANT (TREE_TYPE (gimple_assign_rhs1 (stmt))), @@ -3270,8 +3258,7 @@ ipa_struct_reorg::maybe_record_stmt (cgraph_node *node, gimple *stmt) default: break; } - if (current_mode == STRUCT_REORDER_FIELDS - && struct_layout_optimize_level >= DEAD_FIELD_ELIMINATION) + if (current_layout_opt_level & DEAD_FIELD_ELIMINATION) { /* Look for loads and stores. */ walk_stmt_load_store_ops (stmt, this, find_field_p_load, @@ -3427,9 +3414,11 @@ 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_layout_opt_level >= STRUCT_REORDER_FIELDS) 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_layout_opt_level >= STRUCT_REORDER_FIELDS) return trace_calculate_diff (size_def_stmt, num); else { @@ -3447,15 +3436,15 @@ 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_layout_opt_level >= STRUCT_REORDER_FIELDS) && (gimple_call_builtin_p (stmt, BUILT_IN_REALLOC) || gimple_call_builtin_p (stmt, BUILT_IN_MALLOC) || gimple_call_builtin_p (stmt, BUILT_IN_CALLOC))) return true; - if ((current_mode == COMPLETE_STRUCT_RELAYOUT) + if ((current_layout_opt_level == COMPLETE_STRUCT_RELAYOUT) && gimple_call_builtin_p (stmt, BUILT_IN_CALLOC)) return true; - if ((current_mode == NORMAL) + if ((current_layout_opt_level == STRUCT_SPLIT) && (gimple_call_builtin_p (stmt, BUILT_IN_REALLOC) || gimple_call_builtin_p (stmt, BUILT_IN_MALLOC) || gimple_call_builtin_p (stmt, BUILT_IN_CALLOC) @@ -3576,7 +3565,7 @@ ipa_struct_reorg::maybe_mark_or_record_other_side (tree side, tree other, /* 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_layout_opt_level >= STRUCT_REORDER_FIELDS && TREE_CODE (side) == SSA_NAME && VOID_POINTER_P (TREE_TYPE (side)) && SSA_NAME_VAR (side) @@ -3834,7 +3823,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_layout_opt_level >= STRUCT_REORDER_FIELDS) { bool is_int_ptr = POINTER_TYPE_P (TREE_TYPE (base)) && (TREE_CODE (inner_type (TREE_TYPE (base))) @@ -3896,7 +3885,7 @@ ipa_struct_reorg::get_type_field (tree expr, tree &base, bool &indirect, /* Escape the operation of fetching field with pointer offset such as: *(&(t->right)) = malloc (0); -> MEM[(struct node * *)_1 + 8B] = malloc (0); */ - if (current_mode != NORMAL + if (current_layout_opt_level > STRUCT_SPLIT && (TREE_CODE (expr) == MEM_REF) && (offset != 0)) { gcc_assert (can_escape); @@ -4060,7 +4049,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_layout_opt_level >= STRUCT_REORDER_FIELDS && safe_functions.contains ( node->get_edge (stmt)->callee))) && VOID_POINTER_P (argtypet)) @@ -4088,12 +4077,7 @@ 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 (!opt_for_fn (current_function_decl, flag_ipa_reorder_fields)) - type->mark_escape (escape_non_optimize, stmt); - } - else + if (current_layout_opt_level > NONE) { if (!opt_for_fn (current_function_decl, flag_ipa_struct_reorg)) type->mark_escape (escape_non_optimize, stmt); @@ -4197,7 +4181,7 @@ ipa_struct_reorg::check_type_and_push (tree newdecl, srdecl *decl, void ipa_struct_reorg::check_alloc_num (gimple *stmt, srtype *type) { - if (current_mode == COMPLETE_STRUCT_RELAYOUT + if (current_layout_opt_level == COMPLETE_STRUCT_RELAYOUT && handled_allocation_stmt (stmt)) { tree arg0 = gimple_call_arg (stmt, 0); @@ -4291,7 +4275,7 @@ ipa_struct_reorg::check_definition_call (srdecl *decl, vec<srdecl *> &worklist) if (gimple_call_builtin_p (stmt, BUILT_IN_REALLOC)) check_type_and_push (gimple_call_arg (stmt, 0), decl, worklist, stmt); - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { if (!handled_allocation_stmt (stmt)) type->mark_escape (escape_return, stmt); @@ -4341,7 +4325,8 @@ ipa_struct_reorg::check_definition (srdecl *decl, vec<srdecl *> &worklist) type->mark_escape (escape_cast_void, SSA_NAME_DEF_STMT (ssa_name)); return; } - if (current_mode == STRUCT_REORDER_FIELDS && SSA_NAME_VAR (ssa_name) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS + && 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)); gimple *stmt = SSA_NAME_DEF_STMT (ssa_name); @@ -4425,7 +4410,7 @@ ipa_struct_reorg::check_other_side (srdecl *decl, tree other, gimple *stmt, { /* In Complete Struct Relayout, if lhs type is the same as rhs type, we could return without any harm. */ - if (current_mode == COMPLETE_STRUCT_RELAYOUT) + if (current_layout_opt_level == COMPLETE_STRUCT_RELAYOUT) return; tree base; @@ -4437,7 +4422,7 @@ ipa_struct_reorg::check_other_side (srdecl *decl, tree other, gimple *stmt, if (!get_type_field (other, base, indirect, type1, field, realpart, imagpart, address, escape_from_base)) { - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { /* Release INTEGER_TYPE cast to struct pointer. */ bool cast_from_int_ptr = current_function->is_safe_func && base @@ -4487,7 +4472,8 @@ 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_layout_opt_level < STRUCT_REORDER_FIELDS + || 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)) @@ -4554,12 +4540,9 @@ ipa_struct_reorg::check_use (srdecl *decl, gimple *stmt, tree rhs2 = gimple_cond_rhs (stmt); tree orhs = rhs1; enum tree_code code = gimple_cond_code (stmt); - if ((current_mode == NORMAL && (code != EQ_EXPR && code != NE_EXPR)) - || (current_mode == COMPLETE_STRUCT_RELAYOUT - && (code != EQ_EXPR && code != NE_EXPR - && code != LT_EXPR && code != LE_EXPR - && code != GT_EXPR && code != GE_EXPR)) - || (current_mode == STRUCT_REORDER_FIELDS + if ((current_layout_opt_level == STRUCT_SPLIT + && (code != EQ_EXPR && code != NE_EXPR)) + || (current_layout_opt_level >= COMPLETE_STRUCT_RELAYOUT && (code != EQ_EXPR && code != NE_EXPR && code != LT_EXPR && code != LE_EXPR && code != GT_EXPR && code != GE_EXPR))) @@ -4592,15 +4575,12 @@ ipa_struct_reorg::check_use (srdecl *decl, gimple *stmt, tree rhs2 = gimple_assign_rhs2 (stmt); tree orhs = rhs1; enum tree_code code = gimple_assign_rhs_code (stmt); - if ((current_mode == NORMAL && (code != EQ_EXPR && code != NE_EXPR)) - || (current_mode == COMPLETE_STRUCT_RELAYOUT - && (code != EQ_EXPR && code != NE_EXPR - && code != LT_EXPR && code != LE_EXPR - && code != GT_EXPR && code != GE_EXPR)) - || (current_mode == STRUCT_REORDER_FIELDS + if ((current_layout_opt_level == STRUCT_SPLIT + && (code != EQ_EXPR && code != NE_EXPR)) + || (current_layout_opt_level >= COMPLETE_STRUCT_RELAYOUT && (code != EQ_EXPR && code != NE_EXPR && code != LT_EXPR && code != LE_EXPR - && code != GT_EXPR && code != GE_EXPR))) + && code != GT_EXPR && code != GE_EXPR))) { mark_expr_escape (rhs1, escape_non_eq, stmt); mark_expr_escape (rhs2, escape_non_eq, stmt); @@ -4722,9 +4702,9 @@ 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_layout_opt_level < STRUCT_REORDER_FIELDS) escapes = escape_visible_function; - if (current_mode == STRUCT_REORDER_FIELDS && node->externally_visible) + else if (node->externally_visible) escapes = escape_visible_function; } else if (!node->can_change_signature) @@ -4732,12 +4712,7 @@ 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 (!opt_for_fn (node->decl, flag_ipa_reorder_fields)) - escapes = escape_non_optimize; - } - else if (current_mode == NORMAL || current_mode == COMPLETE_STRUCT_RELAYOUT) + if (current_layout_opt_level > NONE) { if (!opt_for_fn (node->decl, flag_ipa_struct_reorg)) escapes = escape_non_optimize; @@ -4747,10 +4722,10 @@ 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_layout_opt_level >= STRUCT_REORDER_FIELDS) { current_function->is_safe_func = safe_functions.contains (node); - if (dump_file) + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "\nfunction %s/%u: is_safe_func = %d\n", node->name (), node->order, @@ -4958,7 +4933,7 @@ ipa_struct_reorg::record_accesses (void) } /* Add a safe func mechanism. */ - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) record_safe_func_with_void_ptr_parm (); FOR_EACH_FUNCTION (cnode) @@ -5174,8 +5149,7 @@ ipa_struct_reorg::propagate_escape_via_ext_func_types (void) void ipa_struct_reorg::prune_escaped_types (void) { - if (current_mode != COMPLETE_STRUCT_RELAYOUT - && current_mode != STRUCT_REORDER_FIELDS) + if (current_layout_opt_level == STRUCT_SPLIT) { /* Detect recusive types and mark them as escaping. */ detect_cycles (); @@ -5183,7 +5157,7 @@ ipa_struct_reorg::prune_escaped_types (void) mark them as escaping. */ propagate_escape (); } - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { propagate_escape_via_original (); propagate_escape_via_empty_with_no_original (); @@ -5244,7 +5218,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_layout_opt_level < STRUCT_REORDER_FIELDS) { delete function; functions.ordered_remove (i); @@ -5272,7 +5246,7 @@ ipa_struct_reorg::prune_escaped_types (void) /* The escape type is not deleted in STRUCT_REORDER_FIELDS, Then the type that contains the escaped type fields can find complete information. */ - if (current_mode != STRUCT_REORDER_FIELDS) + if (current_layout_opt_level < STRUCT_REORDER_FIELDS) { for (unsigned i = 0; i < types.length ();) { @@ -5320,7 +5294,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_layout_opt_level >= STRUCT_REORDER_FIELDS) { for (unsigned i = 0; i < types.length (); i++) { @@ -5444,8 +5418,7 @@ 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, ".reorg.0", NULL); new_name = get_identifier (name); free (name); } @@ -5532,9 +5505,7 @@ 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"); + vNULL, NULL, NULL, NULL, NULL, "struct_reorg"); new_node->can_change_signature = node->can_change_signature; new_node->make_local (); f->newnode = new_node; @@ -5661,7 +5632,7 @@ ipa_struct_reorg::rewrite_expr (tree expr, newbase1 = build_fold_addr_expr (newbase1); if (indirect) { - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { /* Supports the MEM_REF offset. _1 = MEM[(struct arc *)ap_1 + 72B].flow; @@ -5719,8 +5690,7 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi) { bool remove = false; - if (current_mode == STRUCT_REORDER_FIELDS - && struct_layout_optimize_level >= DEAD_FIELD_ELIMINATION + if (current_layout_opt_level & DEAD_FIELD_ELIMINATION && remove_dead_field_stmt (gimple_assign_lhs (stmt))) { if (dump_file && (dump_flags & TDF_DETAILS)) @@ -5756,10 +5726,10 @@ ipa_struct_reorg::rewrite_assign (gassign *stmt, gimple_stmt_iterator *gsi) return remove; } - if ((current_mode != STRUCT_REORDER_FIELDS + if ((current_layout_opt_level < STRUCT_REORDER_FIELDS && (gimple_assign_rhs_code (stmt) == EQ_EXPR || gimple_assign_rhs_code (stmt) == NE_EXPR)) - || (current_mode == STRUCT_REORDER_FIELDS + || (current_layout_opt_level >= STRUCT_REORDER_FIELDS && (TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)) == tcc_comparison))) { @@ -5769,7 +5739,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_layout_opt_level >= STRUCT_REORDER_FIELDS && rhs_code != EQ_EXPR && rhs_code != NE_EXPR) code = rhs_code; @@ -5818,8 +5788,9 @@ 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_layout_opt_level < STRUCT_REORDER_FIELDS + || (current_layout_opt_level >= STRUCT_REORDER_FIELDS + && (num != NULL))) num = gimplify_build1 (gsi, NOP_EXPR, sizetype, num); for (unsigned i = 0; i < max_split && newlhs[i]; i++) { @@ -5843,7 +5814,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_layout_opt_level >= STRUCT_REORDER_FIELDS && gimple_assign_rhs_code (stmt) == POINTER_DIFF_EXPR) { tree rhs1 = gimple_assign_rhs1 (stmt); @@ -6026,7 +5997,8 @@ 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_layout_opt_level >= STRUCT_REORDER_FIELDS + && f && f->is_safe_func) { tree expr = gimple_call_arg (stmt, 0); tree newexpr[max_split]; @@ -6152,9 +6124,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_layout_opt_level < STRUCT_REORDER_FIELDS && (rhs_code != EQ_EXPR && rhs_code != NE_EXPR)) - || (current_mode == STRUCT_REORDER_FIELDS + || (current_layout_opt_level >= STRUCT_REORDER_FIELDS && TREE_CODE_CLASS (rhs_code) != tcc_comparison)) return false; tree lhs = gimple_cond_lhs (stmt); @@ -6208,7 +6180,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_layout_opt_level >= STRUCT_REORDER_FIELDS) /* Delete debug gimple now. */ return true; bool remove = false; @@ -6367,7 +6339,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_layout_opt_level >= STRUCT_REORDER_FIELDS) { for (unsigned i = 0; i < functions.length (); i++) { @@ -6386,7 +6358,7 @@ ipa_struct_reorg::rewrite_functions (void) return 0; } - if (current_mode == STRUCT_REORDER_FIELDS && dump_file) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS && dump_file) { fprintf (dump_file, "=========== all created newtypes: ===========\n\n"); dump_newtypes (dump_file); @@ -6396,13 +6368,13 @@ ipa_struct_reorg::rewrite_functions (void) { retval = TODO_remove_functions; create_new_functions (); - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { prune_escaped_types (); } } - if (current_mode == STRUCT_REORDER_FIELDS) + if (current_layout_opt_level >= STRUCT_REORDER_FIELDS) { for (unsigned i = 0; i < functions.length (); i++) { @@ -6559,33 +6531,33 @@ ipa_struct_reorg::execute_struct_relayout (void) } unsigned int -ipa_struct_reorg::execute (enum srmode mode) +ipa_struct_reorg::execute (unsigned int opt) { unsigned int ret = 0; if (dump_file) fprintf (dump_file, "\n\n====== ipa_struct_reorg level %d ======\n\n", - mode); + opt); - if (mode == NORMAL || mode == STRUCT_REORDER_FIELDS) + if (opt != COMPLETE_STRUCT_RELAYOUT) { - current_mode = mode; + current_layout_opt_level = opt; /* If there is a top-level inline-asm, the pass immediately returns. */ if (symtab->first_asm_symbol ()) return 0; record_accesses (); prune_escaped_types (); - if (current_mode == NORMAL) + if (current_layout_opt_level == STRUCT_SPLIT) analyze_types (); ret = rewrite_functions (); } - else if (mode == COMPLETE_STRUCT_RELAYOUT) + else { if (dump_file) fprintf (dump_file, "\n\nTry Complete Struct Relayout:\n"); - current_mode = COMPLETE_STRUCT_RELAYOUT; + current_layout_opt_level = COMPLETE_STRUCT_RELAYOUT; if (symtab->first_asm_symbol ()) return 0; record_accesses (); @@ -6622,10 +6594,37 @@ public: virtual unsigned int execute (function *) { unsigned int ret = 0; - ret = ipa_struct_reorg ().execute (NORMAL); - if (!ret) - ret = ipa_struct_reorg ().execute (COMPLETE_STRUCT_RELAYOUT); - return ret; + unsigned int ret_reorg = 0; + unsigned int level = 0; + switch (struct_layout_optimize_level) + { + case 3: level |= DEAD_FIELD_ELIMINATION; + // FALLTHRU + case 2: level |= STRUCT_REORDER_FIELDS; + // FALLTHRU + case 1: + level |= COMPLETE_STRUCT_RELAYOUT; + level |= STRUCT_SPLIT; + break; + case 0: break; + default: gcc_unreachable (); + } + /* Preserved for backward compatibility, reorder fields needs run before + struct split and complete struct relayout. */ + if (flag_ipa_reorder_fields && level < STRUCT_REORDER_FIELDS) + ret = ipa_struct_reorg ().execute (STRUCT_REORDER_FIELDS); + + if (level >= STRUCT_REORDER_FIELDS) + ret = ipa_struct_reorg ().execute (level); + + if (level >= COMPLETE_STRUCT_RELAYOUT) + { + /* Preserved for backward compatibility. */ + ret_reorg = ipa_struct_reorg ().execute (STRUCT_SPLIT); + if (!ret_reorg) + ret_reorg = ipa_struct_reorg ().execute (COMPLETE_STRUCT_RELAYOUT); + } + return ret | ret_reorg; } }; // class pass_ipa_struct_reorg @@ -6645,52 +6644,6 @@ pass_ipa_struct_reorg::gate (function *) && (in_lto_p || flag_whole_program)); } -const pass_data pass_data_ipa_reorder_fields = -{ - SIMPLE_IPA_PASS, // type - "reorder_fields", // name - OPTGROUP_NONE, // optinfo_flags - TV_IPA_REORDER_FIELDS, // tv_id - 0, // properties_required - 0, // properties_provided - 0, // properties_destroyed - 0, // todo_flags_start - 0, // todo_flags_finish -}; - -class pass_ipa_reorder_fields : public simple_ipa_opt_pass -{ -public: - pass_ipa_reorder_fields (gcc::context *ctxt) - : simple_ipa_opt_pass (pass_data_ipa_reorder_fields, ctxt) - {} - - /* opt_pass methods: */ - virtual bool gate (function *); - virtual unsigned int execute (function *) - { - unsigned int ret = 0; - ret = ipa_struct_reorg ().execute (STRUCT_REORDER_FIELDS); - return ret; - } - -}; // class pass_ipa_reorder_fields - -bool -pass_ipa_reorder_fields::gate (function *) -{ - return (optimize >= 3 - && flag_ipa_reorder_fields - /* Don't bother doing anything if the program has errors. */ - && !seen_error () - && flag_lto_partition == LTO_PARTITION_ONE - /* Only enable struct optimizations in C since other - languages' grammar forbid. */ - && lang_c_p () - /* Only enable struct optimizations in lto or whole_program. */ - && (in_lto_p || flag_whole_program)); -} - } // anon namespace @@ -6699,9 +6652,3 @@ make_pass_ipa_struct_reorg (gcc::context *ctxt) { return new pass_ipa_struct_reorg (ctxt); } - -simple_ipa_opt_pass * -make_pass_ipa_reorder_fields (gcc::context *ctxt) -{ - return new pass_ipa_reorder_fields (ctxt); -} diff --git a/gcc/passes.def b/gcc/passes.def index bdc835b87..9692066e4 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -178,7 +178,6 @@ along with GCC; see the file COPYING3. If not see compiled unit. */ INSERT_PASSES_AFTER (all_late_ipa_passes) NEXT_PASS (pass_ipa_pta); - NEXT_PASS (pass_ipa_reorder_fields); /* FIXME: this should be 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 6fa529eee..3fe64047c 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -105,7 +105,7 @@ protected: { /* In structure optimizatons, we call new to ensure that the allocated memory is initialized to 0. */ - if (flag_ipa_struct_reorg || flag_ipa_reorder_fields) + if (flag_ipa_struct_reorg) return is_ggc () ? new (ggc_internal_alloc (sizeof (T))) T () : new T (); @@ -122,7 +122,7 @@ protected: ggc_delete (item); else { - if (flag_ipa_struct_reorg || flag_ipa_reorder_fields) + if (flag_ipa_struct_reorg) delete item; else m_allocator.remove (item); diff --git a/gcc/testsuite/gcc.dg/struct/dfe_DTE_verify.c b/gcc/testsuite/gcc.dg/struct/dfe_DTE_verify.c index 0c9e384c4..afa181e07 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_DTE_verify.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_DTE_verify.c @@ -83,4 +83,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_ele_minus_verify.c b/gcc/testsuite/gcc.dg/struct/dfe_ele_minus_verify.c index 717fcc386..c87db2aba 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_ele_minus_verify.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_ele_minus_verify.c @@ -57,4 +57,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_board_init.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_board_init.c index 7723c240b..d217f7bd8 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_board_init.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_board_init.c @@ -74,4 +74,4 @@ LBF_DFU_If_Needed (void) } } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_claw.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_claw.c index a1feac966..f9e2cf471 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_claw.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_claw.c @@ -81,4 +81,4 @@ claw_snd_conn_req (struct net_device *dev, __u8 link) return rc; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_dtrace.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_dtrace.c index fd1e936ca..c86c4bb3c 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_dtrace.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_dtrace.c @@ -53,4 +53,4 @@ dtrace_bcmp (const void *s1, const void *s2, size_t len) return (0); } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_gc.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_gc.c index b13d785a9..8484d29d2 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_gc.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_gc.c @@ -159,4 +159,4 @@ gc_gray_mark (mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) return children; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_hpsa.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_hpsa.c index bc28a658a..300b2dac4 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_hpsa.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_hpsa.c @@ -123,4 +123,4 @@ hpsa_cmd_dev_match (struct ctlr_info *h, struct CommandList *c, return match; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 0 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_mv_udc_core.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_mv_udc_core.c index 0a585ac3d..9397b98ea 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_mv_udc_core.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_mv_udc_core.c @@ -79,4 +79,4 @@ ep0_reset (struct mv_udc *udc) } } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_tcp_usrreq.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_tcp_usrreq.c index bddd862fe..0ae75e13e 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_tcp_usrreq.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_tcp_usrreq.c @@ -55,4 +55,4 @@ tcp_usr_listen (struct socket *so, struct proc *p) COMMON_END (PRU_LISTEN); } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_extr_ui_main.c b/gcc/testsuite/gcc.dg/struct/dfe_extr_ui_main.c index 1a06f5eec..512fb37a7 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_extr_ui_main.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_extr_ui_main.c @@ -58,4 +58,4 @@ UI_LoadMods () } } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 1 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_mem_ref_offset.c b/gcc/testsuite/gcc.dg/struct/dfe_mem_ref_offset.c index 94eb88d5c..0dea5517c 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_mem_ref_offset.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_mem_ref_offset.c @@ -55,4 +55,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_mul_layer_ptr_record_bug.c b/gcc/testsuite/gcc.dg/struct/dfe_mul_layer_ptr_record_bug.c index bbf9420d0..00bd911c1 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_mul_layer_ptr_record_bug.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_mul_layer_ptr_record_bug.c @@ -27,4 +27,4 @@ main() { return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_ptr_diff.c b/gcc/testsuite/gcc.dg/struct/dfe_ptr_diff.c index f706db968..0cfa6554e 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_ptr_diff.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_ptr_diff.c @@ -68,4 +68,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 3 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 3 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_ptr_negate_expr.c b/gcc/testsuite/gcc.dg/struct/dfe_ptr_negate_expr.c index 963295cb4..4a7069244 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_ptr_negate_expr.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_ptr_negate_expr.c @@ -52,4 +52,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/dfe_ptr_ptr.c b/gcc/testsuite/gcc.dg/struct/dfe_ptr_ptr.c index aa10506a1..b91efe10f 100644 --- a/gcc/testsuite/gcc.dg/struct/dfe_ptr_ptr.c +++ b/gcc/testsuite/gcc.dg/struct/dfe_ptr_ptr.c @@ -52,4 +52,4 @@ main () return 0; } -/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "reorder_fields" } } */ +/* { dg-final { scan-ipa-dump-times "Dead field elimination" 2 "struct_reorg" } } */ 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..1b6a462e2 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_reorg" } } */ \ 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..346c71264 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_reorg" } } */ \ 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 faaf1e3a5..b876fef86 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 "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_reorg" } } */ \ 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..7d7641f01 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_reorg" } } */ \ 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..63fb3f828 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_reorg" } } */ \ 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..8c431e15f 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_reorg" } } */ \ 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..efc95a4cd 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_reorg" } } */ \ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/struct/rf_external_func_types.c b/gcc/testsuite/gcc.dg/struct/rf_external_func_types.c index 84a34f241..2a9bea783 100644 --- a/gcc/testsuite/gcc.dg/struct/rf_external_func_types.c +++ b/gcc/testsuite/gcc.dg/struct/rf_external_func_types.c @@ -66,4 +66,4 @@ test () 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_reorg" } } */ \ 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..75fc10575 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_reorg" } } */ \ 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..9fb06877b 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_reorg" } } */ \ 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..e8eb0eaa0 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_reorg" } } */ \ 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..bd535afd0 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_reorg" } } */ \ 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..11393a197 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_reorg" } } */ \ 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..d601fae64 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_reorg" } } */ \ 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..4d5f25aa1 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_reorg" } } */ \ 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..b3891fde9 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_reorg" } } */ \ 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..4df79e4f0 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_reorg" } } */ \ 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..49d2106d1 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_reorg" } } */ \ 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..f71c7894f 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_reorg" } } */ \ 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..721cee2c6 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_reorg" } } */ \ 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..3871d3d99 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_reorg" } } */ \ 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..5ad206433 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_reorg" } } */ \ 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..a002f9889 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_reorg" } } */ \ 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..f77a062bd 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_reorg" } } */ \ 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..cba6225a5 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_reorg" } } */ \ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp b/gcc/testsuite/gcc.dg/struct/struct-reorg.exp index 6ccb753b5..278c4e4f5 100644 --- a/gcc/testsuite/gcc.dg/struct/struct-reorg.exp +++ b/gcc/testsuite/gcc.dg/struct/struct-reorg.exp @@ -45,7 +45,7 @@ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/rf_*.c]] \ # -fipa-struct-reorg=3 gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dfe*.c]] \ - "" "-fipa-reorder-fields -fipa-struct-reorg=3 -fdump-ipa-all -flto-partition=one -fwhole-program" + "" "-fipa-struct-reorg=3 -fdump-ipa-all -flto-partition=one -fwhole-program" # All done. torture-finish diff --git a/gcc/timevar.def b/gcc/timevar.def index 2b27c858a..98a5a490f 100644 --- a/gcc/timevar.def +++ b/gcc/timevar.def @@ -80,7 +80,6 @@ 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_REORG , "ipa struct reorg optimization") DEFTIMEVAR (TV_IPA_OPT , "ipa various optimizations") DEFTIMEVAR (TV_IPA_LTO_DECOMPRESS , "lto stream decompression") diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index a9ec8ed21..56898e019 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -527,7 +527,6 @@ extern ipa_opt_pass_d *make_pass_ipa_devirt (gcc::context *ctxt); 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_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_reorg (gcc::context *ctxt); extern simple_ipa_opt_pass *make_pass_ipa_pta (gcc::context *ctxt); extern simple_ipa_opt_pass *make_pass_ipa_tm (gcc::context *ctxt); -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2