From patchwork Mon May 10 16:12:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Jambor X-Patchwork-Id: 1476561 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Ff5gK0Pftz9sX3 for ; Tue, 11 May 2021 02:12:43 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 22CC5385740F; Mon, 10 May 2021 16:12:41 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 48CF6385803D for ; Mon, 10 May 2021 16:12:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 48CF6385803D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mjambor@suse.cz X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id E4684B151 for ; Mon, 10 May 2021 16:12:33 +0000 (UTC) From: Martin Jambor To: GCC Patches Subject: [PATCH] ipa: Get rid of IPA_NODE_REF and IPA_EDGE_REF User-Agent: Notmuch/0.31.4 (https://notmuchmail.org) Emacs/27.2 (x86_64-suse-linux-gnu) Date: Mon, 10 May 2021 18:12:33 +0200 Message-ID: MIME-Version: 1.0 X-Spam-Status: No, score=-3039.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Hubicka Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Hi, the node and edge summaries defined in ipa-prop.h are probably the oldest in GCC and so it happened that they are the only ones using macros to look them up and create them. With Honza and Martin we agreed it is ugly and the macros should be removed and the ipa-prop summaries should be accessed like all the other ones but somehow I never got to it until now. The patch is mostly mechanical. Because the lookup machinery was much simpler in the old times (something like the fast summaries we have today), a lot of code queried for the summary multiple times for no good reasons and I fixed that in places where it was easy. Also, before we switched to hash based summaries, new summary pointers had to be obtained whenever the underlying array could be reallocated because of new cgraph nodes/edges. This is no longer necessary and so I removed the instances which I found. Both kinds of these non-mechanical changes should be specifically called out in the ChangeLog. I also removed the IS_VALID_JUMP_FUNC_INDEX macro because it not used anywhere. Bootstrapped and tested on x86_64-linux. OK for trunk? Thanks, Martin gcc/ChangeLog: 2021-05-07 Martin Jambor * ipa-prop.h (IPA_NODE_REF): Removed. (IPA_NODE_REF_GET_CREATE): Likewise. (IPA_EDGE_REF): Likewise. (IPA_EDGE_REF_GET_CREATE): Likewise. (IS_VALID_JUMP_FUNC_INDEX): Likewise. * ipa-cp.c (print_all_lattices): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (ipcp_versionable_function_p): Likewise. (push_node_to_stack): Likewise. (pop_node_from_stack): Likewise. (set_single_call_flag): Replaced two IPA_NODE_REF with one single direct use of ipa_node_params_sum. (initialize_node_lattices): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (ipa_context_from_jfunc): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (ipcp_verify_propagated_values): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (self_recursively_generated_p): Likewise. (propagate_scalar_across_jump_function): Likewise. (propagate_context_across_jump_function): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum, moved the lookup after the early exit. Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (propagate_bits_across_jump_function): Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum. (propagate_vr_across_jump_function): Likewise. (propagate_aggregate_lattice): Likewise. (propagate_aggs_across_jump_function): Likewise. (propagate_constants_across_call): Likewise, also replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (good_cloning_opportunity_p): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (estimate_local_effects): Likewise. (add_all_node_vals_to_toposort): Likewise. (propagate_constants_topo): Likewise. (ipcp_propagate_stage): Likewise. (ipcp_discover_new_direct_edges): Likewise. (calls_same_node_or_its_all_contexts_clone_p): Likewise. (cgraph_edge_brings_value_p): Likewise (in both overloaded functions). (get_info_about_necessary_edges): Likewise. (want_remove_some_param_p): Likewise. (create_specialized_node): Likewise. (self_recursive_pass_through_p): Likewise. (self_recursive_agg_pass_through_p): Likewise. (find_more_scalar_values_for_callers_subset): Likewise and also replaced IPA_EDGE_REF with direct uses of ipa_edge_args_sum, in one case replacing two of those with a single query. (find_more_contexts_for_caller_subset): Likewise for the ipa_polymorphic_call_context overload. (intersect_aggregates_with_edge): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum. (find_aggregate_values_for_callers_subset): Likewise, also reusing results of ipa_edge_args_sum->get. (cgraph_edge_brings_all_scalars_for_node): Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum, replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (cgraph_edge_brings_all_agg_vals_for_node): Likewise, moved node summary query after the early exit and reused the result later. (decide_about_value): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (decide_whether_version_node): Likewise. Removed re-querying for summaries after cloning. (spread_undeadness): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (has_undead_caller_from_outside_scc_p): Likewise, reusing results of some queries. (identify_dead_nodes): Likewise. (ipcp_store_bits_results): Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum. (ipcp_store_vr_results): Likewise. * ipa-fnsummary.c (evaluate_properties_for_edge): Likewise. (ipa_fn_summary_t::duplicate): Likewise. (analyze_function_body): Likewise. (estimate_calls_size_and_time): Likewise. (ipa_cached_call_context::duplicate_from): Likewise. (ipa_call_context::equal_to): Likewise. (remap_edge_params): Likewise. (ipa_merge_fn_summary_after_inlining): Likewise. (inline_read_section): Likewise. * ipa-icf.c (sem_function::param_used_p): Likewise. * ipa-modref.c (compute_parm_map): Likewise. (compute_parm_map): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (get_access_for_fnspec): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. * ipa-profile.c (check_argument_count): Likewise. * ipa-prop.c (ipa_alloc_node_params): Replaced IPA_NODE_REF_GET_CREATE with a direct use of ipa_node_params_sum. (ipa_initialize_node_params): Likewise. (ipa_print_node_jump_functions_for_edge): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum and reused the query result. (ipa_compute_jump_functions_for_edge): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (ipa_note_param_call): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum and reused the result of the query. (ipa_analyze_node): Likewise. (ipa_analyze_controlled_uses): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (update_jump_functions_after_inlining): Replaced IPA_EDGE_REF with direct uses of ipa_edge_args_sum. (update_indirect_edges_after_inlining): Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. Removed superficial re-querying the top edge summary. (propagate_controlled_uses): Replaced IPA_NODE_REF with direct uses of ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (ipa_propagate_indirect_call_infos): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (ipa_edge_args_sum_t::duplicate): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (ipa_print_node_params): Likewise. (ipa_write_node_info): Likewise and also replaced IPA_EDGE_REF with direct uses of ipa_edge_args_sum. (ipa_read_edge_info): Replaced IPA_EDGE_REF with a direct use of ipa_edge_args_sum. (ipa_read_node_info): Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum. (ipa_prop_write_jump_functions): Likewise. Move variable node to the scopes where it is used. --- gcc/ipa-cp.c | 203 +++++++++++++++++++++++--------------------- gcc/ipa-fnsummary.c | 30 ++++--- gcc/ipa-icf.c | 4 +- gcc/ipa-modref.c | 15 ++-- gcc/ipa-profile.c | 4 +- gcc/ipa-prop.c | 76 ++++++++--------- gcc/ipa-prop.h | 10 --- 7 files changed, 172 insertions(+), 170 deletions(-) diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 6041f75d824..2cae69e5a1b 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -550,7 +550,7 @@ print_all_lattices (FILE * f, bool dump_sources, bool dump_benefits) { class ipa_node_params *info; - info = IPA_NODE_REF (node); + info = ipa_node_params_sum->get (node); /* Skip unoptimized functions and constprop clones since we don't make lattices for them. */ if (!info || info->ipcp_orig_node) @@ -666,7 +666,8 @@ determine_versionability (struct cgraph_node *node, static bool ipcp_versionable_function_p (struct cgraph_node *node) { - return IPA_NODE_REF (node) && IPA_NODE_REF (node)->versionable; + ipa_node_params *info = ipa_node_params_sum->get (node); + return info && info->versionable; } /* Structure holding accumulated information about callers of a node. */ @@ -861,7 +862,7 @@ free_toporder_info (class ipa_topo_info *topo) static inline void push_node_to_stack (class ipa_topo_info *topo, struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); if (info->node_enqueued) return; info->node_enqueued = 1; @@ -879,7 +880,7 @@ pop_node_from_stack (class ipa_topo_info *topo) struct cgraph_node *node; topo->stack_top--; node = topo->stack[topo->stack_top]; - IPA_NODE_REF (node)->node_enqueued = 0; + ipa_node_params_sum->get (node)->node_enqueued = 0; return node; } else @@ -1178,11 +1179,12 @@ set_single_call_flag (cgraph_node *node, void *) /* Local thunks can be handled transparently, skip them. */ while (cs && cs->caller->thunk && cs->caller->local) cs = cs->next_caller; - if (cs && IPA_NODE_REF (cs->caller)) - { - IPA_NODE_REF (cs->caller)->node_calling_single_call = true; - return true; - } + if (cs) + if (ipa_node_params* info = ipa_node_params_sum->get (cs->caller)) + { + info->node_calling_single_call = true; + return true; + } return false; } @@ -1191,7 +1193,7 @@ set_single_call_flag (cgraph_node *node, void *) static void initialize_node_lattices (struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); struct cgraph_edge *ie; bool disable = false, variable = false; int i; @@ -1482,7 +1484,7 @@ ipa_polymorphic_call_context ipa_context_from_jfunc (ipa_node_params *info, cgraph_edge *cs, int csidx, ipa_jump_func *jfunc) { - ipa_edge_args *args = IPA_EDGE_REF (cs); + ipa_edge_args *args = ipa_edge_args_sum->get (cs); ipa_polymorphic_call_context ctx; ipa_polymorphic_call_context *edge_ctx = cs ? ipa_get_ith_polymorhic_call_context (args, csidx) : NULL; @@ -1769,7 +1771,7 @@ ipcp_verify_propagated_values (void) FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); if (!opt_for_fn (node->decl, flag_ipa_cp) || !opt_for_fn (node->decl, optimize)) continue; @@ -1957,7 +1959,7 @@ self_recursively_generated_p (ipcp_value *val) continue; if (!info) - info = IPA_NODE_REF (cs->caller); + info = ipa_node_params_sum->get (cs->caller); class ipcp_param_lattices *plats = ipa_get_parm_lattices (info, src->index); @@ -2196,7 +2198,7 @@ propagate_scalar_across_jump_function (struct cgraph_edge *cs, else if (jfunc->type == IPA_JF_PASS_THROUGH || jfunc->type == IPA_JF_ANCESTOR) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); ipcp_lattice *src_lat; int src_idx; bool ret; @@ -2243,9 +2245,9 @@ propagate_context_across_jump_function (cgraph_edge *cs, ipa_jump_func *jfunc, int idx, ipcp_lattice *dest_lat) { - ipa_edge_args *args = IPA_EDGE_REF (cs); if (dest_lat->bottom) return false; + ipa_edge_args *args = ipa_edge_args_sum->get (cs); bool ret = false; bool added_sth = false; bool type_preserved = true; @@ -2259,7 +2261,7 @@ propagate_context_across_jump_function (cgraph_edge *cs, if (jfunc->type == IPA_JF_PASS_THROUGH || jfunc->type == IPA_JF_ANCESTOR) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx; ipcp_lattice *src_lat; @@ -2334,7 +2336,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, enum availability availability; cgraph_node *callee = cs->callee->function_symbol (&availability); - class ipa_node_params *callee_info = IPA_NODE_REF (callee); + ipa_node_params *callee_info = ipa_node_params_sum->get (callee); tree parm_type = ipa_get_type (callee_info, idx); /* For K&R C programs, ipa_get_type() could return NULL_TREE. Avoid the @@ -2357,7 +2359,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, int idx, if (jfunc->type == IPA_JF_PASS_THROUGH || jfunc->type == IPA_JF_ANCESTOR) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); tree operand = NULL_TREE; enum tree_code code; unsigned src_idx; @@ -2430,7 +2432,7 @@ propagate_vr_across_jump_function (cgraph_edge *cs, ipa_jump_func *jfunc, if (jfunc->type == IPA_JF_PASS_THROUGH) { enum tree_code operation = ipa_get_jf_pass_through_operation (jfunc); - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx = ipa_get_jf_pass_through_formal_id (jfunc); class ipcp_param_lattices *src_lats = ipa_get_parm_lattices (caller_info, src_idx); @@ -2702,7 +2704,7 @@ propagate_aggregate_lattice (struct cgraph_edge *cs, gcc_checking_assert (item->jftype == IPA_JF_PASS_THROUGH || item->jftype == IPA_JF_LOAD_AGG); - caller_info = IPA_NODE_REF (cs->caller); + caller_info = ipa_node_params_sum->get (cs->caller); src_idx = item->value.pass_through.formal_id; src_plats = ipa_get_parm_lattices (caller_info, src_idx); @@ -2768,7 +2770,7 @@ propagate_aggs_across_jump_function (struct cgraph_edge *cs, if (jfunc->type == IPA_JF_PASS_THROUGH && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx = ipa_get_jf_pass_through_formal_id (jfunc); class ipcp_param_lattices *src_plats; @@ -2786,7 +2788,7 @@ propagate_aggs_across_jump_function (struct cgraph_edge *cs, else if (jfunc->type == IPA_JF_ANCESTOR && ipa_get_jf_ancestor_agg_preserved (jfunc)) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx = ipa_get_jf_ancestor_formal_id (jfunc); class ipcp_param_lattices *src_plats; @@ -2873,11 +2875,11 @@ propagate_constants_across_call (struct cgraph_edge *cs) if (!callee->definition) return false; gcc_checking_assert (callee->has_gimple_body_p ()); - callee_info = IPA_NODE_REF (callee); + callee_info = ipa_node_params_sum->get (callee); if (!callee_info) return false; - args = IPA_EDGE_REF (cs); + args = ipa_edge_args_sum->get (cs); parms_count = ipa_get_param_count (callee_info); if (parms_count == 0) return false; @@ -3296,7 +3298,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, sreal time_benefit, gcc_assert (size_cost > 0); - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int eval_threshold = opt_for_fn (node->decl, param_ipa_cp_eval_threshold); if (max_count > profile_count::zero ()) { @@ -3501,7 +3503,7 @@ get_max_overall_size (cgraph_node *node) static void estimate_local_effects (struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); bool always_const; int removable_params_cost; @@ -3746,7 +3748,7 @@ value_topo_info::add_val (ipcp_value *cur_val) static void add_all_node_vals_to_toposort (cgraph_node *node, ipa_topo_info *topo) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); for (i = 0; i < count; i++) @@ -3830,7 +3832,7 @@ propagate_constants_topo (class ipa_topo_info *topo) if (!info) { - info = IPA_NODE_REF (v); + info = ipa_node_params_sum->get (v); info->node_within_scc = true; } @@ -3940,7 +3942,7 @@ ipcp_propagate_stage (class ipa_topo_info *topo) && opt_for_fn (node->decl, flag_ipa_cp) && opt_for_fn (node->decl, optimize)) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); determine_versionability (node, info); unsigned nlattices = ipa_get_param_count (info); @@ -4004,7 +4006,7 @@ ipcp_discover_new_direct_edges (struct cgraph_node *node, if (cs && !agg_contents && !polymorphic) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int c = ipa_get_controlled_uses (info, param_index); if (c != IPA_UNDESCRIBED_USE) { @@ -4103,7 +4105,7 @@ calls_same_node_or_its_all_contexts_clone_p (cgraph_edge *cs, cgraph_node *dest, if (!allow_recursion_to_clone && cs->caller == callee) return false; - class ipa_node_params *info = IPA_NODE_REF (callee); + ipa_node_params *info = ipa_node_params_sum->get (callee); return info->is_all_contexts_clone && info->ipcp_orig_node == dest; } @@ -4114,7 +4116,7 @@ static bool cgraph_edge_brings_value_p (cgraph_edge *cs, ipcp_value_source *src, cgraph_node *dest, ipcp_value *dest_val) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); if (!calls_same_node_or_its_all_contexts_clone_p (cs, dest, !src->val) || caller_info->node_dead) @@ -4168,7 +4170,7 @@ cgraph_edge_brings_value_p (cgraph_edge *cs, cgraph_node *dest, ipcp_value *) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); if (!calls_same_node_or_its_all_contexts_clone_p (cs, dest, true) || caller_info->node_dead) @@ -4243,7 +4245,7 @@ get_info_about_necessary_edges (ipcp_value *val, cgraph_node *dest, *count_sum = cnt; *caller_count = count; - if (!hot && IPA_NODE_REF (dest)->node_within_scc) + if (!hot && ipa_node_params_sum->get (dest)->node_within_scc) { struct cgraph_edge *cs; @@ -4494,7 +4496,7 @@ want_remove_some_param_p (cgraph_node *node, vec known_csts) { auto_vec surviving; bool filled_vec = false; - ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); for (i = 0; i < count; i++) @@ -4527,7 +4529,7 @@ create_specialized_node (struct cgraph_node *node, struct ipa_agg_replacement_value *aggvals, vec callers) { - class ipa_node_params *new_info, *info = IPA_NODE_REF (node); + ipa_node_params *new_info, *info = ipa_node_params_sum->get (node); vec *replace_trees = NULL; vec *new_params = NULL; struct ipa_agg_replacement_value *av; @@ -4662,7 +4664,7 @@ create_specialized_node (struct cgraph_node *node, } ipa_check_create_node_params (); update_profiling_info (node, new_node); - new_info = IPA_NODE_REF (new_node); + new_info = ipa_node_params_sum->get (new_node); new_info->ipcp_orig_node = node; new_node->ipcp_clone = true; new_info->known_csts = known_csts; @@ -4689,8 +4691,8 @@ self_recursive_pass_through_p (cgraph_edge *cs, ipa_jump_func *jfunc, int i, && jfunc->type == IPA_JF_PASS_THROUGH && (!simple || ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) && ipa_get_jf_pass_through_formal_id (jfunc) == i - && IPA_NODE_REF (cs->caller) - && !IPA_NODE_REF (cs->caller)->ipcp_orig_node) + && ipa_node_params_sum->get (cs->caller) + && !ipa_node_params_sum->get (cs->caller)->ipcp_orig_node) return true; return false; } @@ -4713,8 +4715,8 @@ self_recursive_agg_pass_through_p (cgraph_edge *cs, ipa_agg_jf_item *jfunc, && (!simple || jfunc->value.pass_through.operation == NOP_EXPR) && jfunc->value.pass_through.formal_id == i && useless_type_conversion_p (jfunc->value.load_agg.type, jfunc->type) - && IPA_NODE_REF (cs->caller) - && !IPA_NODE_REF (cs->caller)->ipcp_orig_node) + && ipa_node_params_sum->get (cs->caller) + && !ipa_node_params_sum->get (cs->caller)->ipcp_orig_node) return true; return false; } @@ -4727,7 +4729,7 @@ find_more_scalar_values_for_callers_subset (struct cgraph_node *node, vec known_csts, vec callers) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); for (i = 0; i < count; i++) @@ -4746,15 +4748,16 @@ find_more_scalar_values_for_callers_subset (struct cgraph_node *node, struct ipa_jump_func *jump_func; tree t; - if (!IPA_EDGE_REF (cs) - || i >= ipa_get_cs_argument_count (IPA_EDGE_REF (cs)) + ipa_edge_args *args = ipa_edge_args_sum->get (cs); + if (!args + || i >= ipa_get_cs_argument_count (args) || (i == 0 && call_passes_through_thunk (cs))) { newval = NULL_TREE; break; } - jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i); + jump_func = ipa_get_ith_jump_func (args, i); /* Besides simple pass-through jump function, arithmetic jump function could also introduce argument-direct-pass-through for @@ -4777,8 +4780,8 @@ find_more_scalar_values_for_callers_subset (struct cgraph_node *node, type); } else - t = ipa_value_from_jfunc (IPA_NODE_REF (cs->caller), jump_func, - type); + t = ipa_value_from_jfunc (ipa_node_params_sum->get (cs->caller), + jump_func, type); if (!t || (newval && !values_equal_for_ipcp_p (t, newval)) @@ -4818,7 +4821,7 @@ find_more_contexts_for_caller_subset (cgraph_node *node, *known_contexts, vec callers) { - ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); for (i = 0; i < count; i++) @@ -4836,14 +4839,14 @@ find_more_contexts_for_caller_subset (cgraph_node *node, FOR_EACH_VEC_ELT (callers, j, cs) { - if (!IPA_EDGE_REF (cs) - || i >= ipa_get_cs_argument_count (IPA_EDGE_REF (cs))) + ipa_edge_args *args = ipa_edge_args_sum->get (cs); + if (!args + || i >= ipa_get_cs_argument_count (args)) return; - ipa_jump_func *jfunc = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), - i); + ipa_jump_func *jfunc = ipa_get_ith_jump_func (args, i); ipa_polymorphic_call_context ctx; - ctx = ipa_context_from_jfunc (IPA_NODE_REF (cs->caller), cs, i, - jfunc); + ctx = ipa_context_from_jfunc (ipa_node_params_sum->get (cs->caller), + cs, i, jfunc); if (first) { newval = ctx; @@ -5020,19 +5023,19 @@ intersect_aggregates_with_edge (struct cgraph_edge *cs, int index, vec inter) { struct ipa_jump_func *jfunc; - jfunc = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), index); + jfunc = ipa_get_ith_jump_func (ipa_edge_args_sum->get (cs), index); if (jfunc->type == IPA_JF_PASS_THROUGH && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx = ipa_get_jf_pass_through_formal_id (jfunc); if (caller_info->ipcp_orig_node) { struct cgraph_node *orig_node = caller_info->ipcp_orig_node; class ipcp_param_lattices *orig_plats; - orig_plats = ipa_get_parm_lattices (IPA_NODE_REF (orig_node), - src_idx); + ipa_node_params *orig_info = ipa_node_params_sum->get (orig_node); + orig_plats = ipa_get_parm_lattices (orig_info, src_idx); if (agg_pass_through_permissible_p (orig_plats, jfunc)) { if (!inter.exists ()) @@ -5063,7 +5066,7 @@ intersect_aggregates_with_edge (struct cgraph_edge *cs, int index, else if (jfunc->type == IPA_JF_ANCESTOR && ipa_get_jf_ancestor_agg_preserved (jfunc)) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); int src_idx = ipa_get_jf_ancestor_formal_id (jfunc); class ipcp_param_lattices *src_plats; HOST_WIDE_INT delta = ipa_get_jf_ancestor_offset (jfunc); @@ -5092,7 +5095,7 @@ intersect_aggregates_with_edge (struct cgraph_edge *cs, int index, if (jfunc->agg.items) { - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); struct ipa_agg_value *item; int k; @@ -5179,7 +5182,7 @@ static struct ipa_agg_replacement_value * find_aggregate_values_for_callers_subset (struct cgraph_node *node, vec callers) { - class ipa_node_params *dest_info = IPA_NODE_REF (node); + ipa_node_params *dest_info = ipa_node_params_sum->get (node); struct ipa_agg_replacement_value *res; struct ipa_agg_replacement_value **tail = &res; struct cgraph_edge *cs; @@ -5187,12 +5190,13 @@ find_aggregate_values_for_callers_subset (struct cgraph_node *node, FOR_EACH_VEC_ELT (callers, j, cs) { - if (!IPA_EDGE_REF (cs)) + ipa_edge_args *args = ipa_edge_args_sum->get (cs); + if (!args) { count = 0; break; } - int c = ipa_get_cs_argument_count (IPA_EDGE_REF (cs)); + int c = ipa_get_cs_argument_count (args); if (c < count) count = c; } @@ -5213,7 +5217,7 @@ find_aggregate_values_for_callers_subset (struct cgraph_node *node, FOR_EACH_VEC_ELT (callers, j, cs) { struct ipa_jump_func *jfunc - = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i); + = ipa_get_ith_jump_func (ipa_edge_args_sum->get (cs), i); if (self_recursive_pass_through_p (cs, jfunc, i) && (!plats->aggs_by_ref || ipa_get_jf_pass_through_agg_preserved (jfunc))) @@ -5255,14 +5259,14 @@ static bool cgraph_edge_brings_all_scalars_for_node (struct cgraph_edge *cs, struct cgraph_node *node) { - class ipa_node_params *dest_info = IPA_NODE_REF (node); + ipa_node_params *dest_info = ipa_node_params_sum->get (node); int count = ipa_get_param_count (dest_info); class ipa_node_params *caller_info; class ipa_edge_args *args; int i; - caller_info = IPA_NODE_REF (cs->caller); - args = IPA_EDGE_REF (cs); + caller_info = ipa_node_params_sum->get (cs->caller); + args = ipa_edge_args_sum->get (cs); for (i = 0; i < count; i++) { struct ipa_jump_func *jump_func; @@ -5289,7 +5293,6 @@ static bool cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs, struct cgraph_node *node) { - class ipa_node_params *orig_node_info; struct ipa_agg_replacement_value *aggval; int i, ec, count; @@ -5297,14 +5300,16 @@ cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs, if (!aggval) return true; - count = ipa_get_param_count (IPA_NODE_REF (node)); - ec = ipa_get_cs_argument_count (IPA_EDGE_REF (cs)); + ipa_node_params *clone_node_info = ipa_node_params_sum->get (node); + count = ipa_get_param_count (clone_node_info); + ec = ipa_get_cs_argument_count (ipa_edge_args_sum->get (cs)); if (ec < count) for (struct ipa_agg_replacement_value *av = aggval; av; av = av->next) if (aggval->index >= ec) return false; - orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node); + ipa_node_params *orig_node_info + = ipa_node_params_sum->get (clone_node_info->ipcp_orig_node); for (i = 0; i < count; i++) { @@ -5522,7 +5527,7 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset, fprintf (dump_file, " - considering value "); print_ipcp_constant_value (dump_file, val->value); fprintf (dump_file, " for "); - ipa_dump_param (dump_file, IPA_NODE_REF (node), index); + ipa_dump_param (dump_file, ipa_node_params_sum->get (node), index); if (offset != -1) fprintf (dump_file, ", offset: " HOST_WIDE_INT_PRINT_DEC, offset); fprintf (dump_file, " (caller_count: %i)\n", caller_count); @@ -5573,7 +5578,7 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset, static bool decide_whether_version_node (struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int i, count = ipa_get_param_count (info); bool ret = false; @@ -5622,8 +5627,6 @@ decide_whether_version_node (struct cgraph_node *node) for (val = ctxlat->values; val; val = val->next) ret |= decide_about_value (node, i, -1, val, &avals); } - - info = IPA_NODE_REF (node); } if (info->do_clone_for_all_contexts) @@ -5640,7 +5643,7 @@ decide_whether_version_node (struct cgraph_node *node) for (int i = callers.length () - 1; i >= 0; i--) { cgraph_edge *cs = callers[i]; - class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); if (caller_info && caller_info->node_dead) callers.unordered_remove (i); @@ -5675,9 +5678,8 @@ decide_whether_version_node (struct cgraph_node *node) } clone = create_specialized_node (node, known_csts, known_contexts, aggvals, callers); - info = IPA_NODE_REF (node); info->do_clone_for_all_contexts = false; - IPA_NODE_REF (clone)->is_all_contexts_clone = true; + ipa_node_params_sum->get (clone)->is_all_contexts_clone = true; ret = true; } @@ -5698,7 +5700,7 @@ spread_undeadness (struct cgraph_node *node) class ipa_node_params *info; callee = cs->callee->function_symbol (NULL); - info = IPA_NODE_REF (callee); + info = ipa_node_params_sum->get (callee); if (info && info->node_dead) { @@ -5722,10 +5724,13 @@ has_undead_caller_from_outside_scc_p (struct cgraph_node *node, && cs->caller->call_for_symbol_thunks_and_aliases (has_undead_caller_from_outside_scc_p, NULL, true)) return true; - else if (!ipa_edge_within_scc (cs) - && (!IPA_NODE_REF (cs->caller) /* Unoptimized caller. */ - || !IPA_NODE_REF (cs->caller)->node_dead)) + else if (!ipa_edge_within_scc (cs)) + { + ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller); + if (!caller_info /* Unoptimized caller are like dead ones. */ + || !caller_info->node_dead) return true; + } return false; } @@ -5738,21 +5743,29 @@ identify_dead_nodes (struct cgraph_node *node) { struct cgraph_node *v; for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle) - if (v->local - && IPA_NODE_REF (v) - && !v->call_for_symbol_thunks_and_aliases - (has_undead_caller_from_outside_scc_p, NULL, true)) - IPA_NODE_REF (v)->node_dead = 1; + if (v->local) + { + ipa_node_params *info = ipa_node_params_sum->get (v); + if (info + && !v->call_for_symbol_thunks_and_aliases + (has_undead_caller_from_outside_scc_p, NULL, true)) + info->node_dead = 1; + } for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle) - if (IPA_NODE_REF (v) && !IPA_NODE_REF (v)->node_dead) - spread_undeadness (v); + { + ipa_node_params *info = ipa_node_params_sum->get (v); + if (info && !info->node_dead) + spread_undeadness (v); + } if (dump_file && (dump_flags & TDF_DETAILS)) { for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle) - if (IPA_NODE_REF (v) && IPA_NODE_REF (v)->node_dead) - fprintf (dump_file, " Marking node as dead: %s.\n", v->dump_name ()); + if (ipa_node_params_sum->get (v) + && ipa_node_params_sum->get (v)->node_dead) + fprintf (dump_file, " Marking node as dead: %s.\n", + v->dump_name ()); } } @@ -5798,7 +5811,7 @@ ipcp_store_bits_results (void) FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) { - ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); bool dumped_sth = false; bool found_useful_result = false; @@ -5812,7 +5825,7 @@ ipcp_store_bits_results (void) } if (info->ipcp_orig_node) - info = IPA_NODE_REF (info->ipcp_orig_node); + info = ipa_node_params_sum->get (info->ipcp_orig_node); if (!info->lattices) /* Newly expanded artificial thunks do not have lattices. */ continue; @@ -5879,7 +5892,7 @@ ipcp_store_vr_results (void) FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) { - ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); bool found_useful_result = false; if (!info || !opt_for_fn (node->decl, flag_ipa_vrp)) @@ -5892,7 +5905,7 @@ ipcp_store_vr_results (void) } if (info->ipcp_orig_node) - info = IPA_NODE_REF (info->ipcp_orig_node); + info = ipa_node_params_sum->get (info->ipcp_orig_node); if (!info->lattices) /* Newly expanded artificial thunks do not have lattices. */ continue; diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c index 18bbae145b9..4e5be812734 100644 --- a/gcc/ipa-fnsummary.c +++ b/gcc/ipa-fnsummary.c @@ -590,7 +590,7 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p, if (ipa_node_params_sum && !e->call_stmt_cannot_inline_p && (info->conds || compute_contexts) - && (args = IPA_EDGE_REF (e)) != NULL) + && (args = ipa_edge_args_sum->get (e)) != NULL) { struct cgraph_node *caller; class ipa_node_params *caller_parms_info, *callee_pi = NULL; @@ -603,8 +603,8 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p, caller = e->caller->inlined_to; else caller = e->caller; - caller_parms_info = IPA_NODE_REF (caller); - callee_pi = IPA_NODE_REF (callee); + caller_parms_info = ipa_node_params_sum->get (caller); + callee_pi = ipa_node_params_sum->get (callee); /* Watch for thunks. */ if (callee_pi) @@ -816,7 +816,7 @@ ipa_fn_summary_t::duplicate (cgraph_node *src, if (ipa_node_params_sum && cinfo && cinfo->tree_map) { /* Use SRC parm info since it may not be copied yet. */ - class ipa_node_params *parms_info = IPA_NODE_REF (src); + ipa_node_params *parms_info = ipa_node_params_sum->get (src); ipa_auto_call_arg_values avals; int count = ipa_get_param_count (parms_info); int i, j; @@ -2584,7 +2584,8 @@ analyze_function_body (struct cgraph_node *node, bool early) struct function *my_function = DECL_STRUCT_FUNCTION (node->decl); sreal freq; class ipa_fn_summary *info = ipa_fn_summaries->get_create (node); - class ipa_node_params *params_summary = early ? NULL : IPA_NODE_REF (node); + ipa_node_params *params_summary + = early ? NULL : ipa_node_params_sum->get (node); predicate bb_predicate; struct ipa_func_body_info fbi; vec nonconstant_names = vNULL; @@ -2622,7 +2623,7 @@ analyze_function_body (struct cgraph_node *node, bool early) if (ipa_node_params_sum) { fbi.node = node; - fbi.info = IPA_NODE_REF (node); + fbi.info = ipa_node_params_sum->get (node); fbi.bb_infos = vNULL; fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true); fbi.param_count = count_formal_params (node->decl); @@ -3368,7 +3369,7 @@ estimate_calls_size_and_time (struct cgraph_node *node, int *size, || avals->m_known_contexts.length () || avals->m_known_aggs.length ())) { - class ipa_node_params *params_summary = IPA_NODE_REF (node); + ipa_node_params *params_summary = ipa_node_params_sum->get (node); unsigned int nargs = params_summary ? ipa_get_param_count (params_summary) : 0; @@ -3463,7 +3464,7 @@ ipa_cached_call_context::duplicate_from (const ipa_call_context &ctx) m_node = ctx.m_node; m_possible_truths = ctx.m_possible_truths; m_nonspec_possible_truths = ctx.m_nonspec_possible_truths; - class ipa_node_params *params_summary = IPA_NODE_REF (m_node); + ipa_node_params *params_summary = ipa_node_params_sum->get (m_node); unsigned int nargs = params_summary ? ipa_get_param_count (params_summary) : 0; @@ -3553,7 +3554,7 @@ ipa_call_context::equal_to (const ipa_call_context &ctx) || m_nonspec_possible_truths != ctx.m_nonspec_possible_truths) return false; - class ipa_node_params *params_summary = IPA_NODE_REF (m_node); + ipa_node_params *params_summary = ipa_node_params_sum->get (m_node); unsigned int nargs = params_summary ? ipa_get_param_count (params_summary) : 0; @@ -3902,7 +3903,7 @@ remap_edge_params (struct cgraph_edge *inlined_edge, if (ipa_node_params_sum) { int i; - class ipa_edge_args *args = IPA_EDGE_REF (edge); + ipa_edge_args *args = ipa_edge_args_sum->get (edge); if (!args) return; class ipa_call_summary *es = ipa_call_summaries->get (edge); @@ -4055,8 +4056,8 @@ ipa_merge_fn_summary_after_inlining (struct cgraph_edge *edge) int i; predicate toplev_predicate; class ipa_call_summary *es = ipa_call_summaries->get (edge); - class ipa_node_params *params_summary = (ipa_node_params_sum - ? IPA_NODE_REF (to) : NULL); + ipa_node_params *params_summary = (ipa_node_params_sum + ? ipa_node_params_sum->get (to) : NULL); if (es->predicate) toplev_predicate = *es->predicate; @@ -4072,7 +4073,7 @@ ipa_merge_fn_summary_after_inlining (struct cgraph_edge *edge) } if (ipa_node_params_sum && callee_info->conds) { - class ipa_edge_args *args = IPA_EDGE_REF (edge); + ipa_edge_args *args = ipa_edge_args_sum->get (edge); int count = args ? ipa_get_cs_argument_count (args) : 0; int i; @@ -4384,7 +4385,8 @@ inline_read_section (struct lto_file_decl_data *file_data, const char *data, node = dyn_cast (lto_symtab_encoder_deref (encoder, index)); info = node->prevailing_p () ? ipa_fn_summaries->get_create (node) : NULL; - params_summary = node->prevailing_p () ? IPA_NODE_REF (node) : NULL; + params_summary = node->prevailing_p () + ? ipa_node_params_sum->get (node) : NULL; size_info = node->prevailing_p () ? ipa_size_summaries->get_create (node) : NULL; diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 5dd33a75c3a..4c1f25d0834 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -496,12 +496,12 @@ sem_function::param_used_p (unsigned int i) if (ipa_node_params_sum == NULL) return true; - class ipa_node_params *parms_info = IPA_NODE_REF (get_node ()); + ipa_node_params *parms_info = ipa_node_params_sum->get (get_node ()); if (!parms_info || vec_safe_length (parms_info->descriptors) <= i) return true; - return ipa_is_param_used (IPA_NODE_REF (get_node ()), i); + return ipa_is_param_used (parms_info, i); } /* Perform additional check needed to match types function parameters that are diff --git a/gcc/ipa-modref.c b/gcc/ipa-modref.c index e7f79caf34d..d5a8332fb55 100644 --- a/gcc/ipa-modref.c +++ b/gcc/ipa-modref.c @@ -2899,7 +2899,7 @@ compute_parm_map (cgraph_edge *callee_edge, vec *parm_map) class ipa_edge_args *args; if (ipa_node_params_sum && !callee_edge->call_stmt_cannot_inline_p - && (args = IPA_EDGE_REF (callee_edge)) != NULL) + && (args = ipa_edge_args_sum->get (callee_edge)) != NULL) { int i, count = ipa_get_cs_argument_count (args); class ipa_node_params *caller_parms_info, *callee_pi; @@ -2909,10 +2909,11 @@ compute_parm_map (cgraph_edge *callee_edge, vec *parm_map) = callee_edge->callee->function_or_virtual_thunk_symbol (NULL, callee_edge->caller); - caller_parms_info = IPA_NODE_REF (callee_edge->caller->inlined_to - ? callee_edge->caller->inlined_to - : callee_edge->caller); - callee_pi = IPA_NODE_REF (callee); + caller_parms_info + = ipa_node_params_sum->get (callee_edge->caller->inlined_to + ? callee_edge->caller->inlined_to + : callee_edge->caller); + callee_pi = ipa_node_params_sum->get (callee); (*parm_map).safe_grow_cleared (count, true); @@ -3240,8 +3241,8 @@ get_access_for_fnspec (cgraph_edge *e, attr_fnspec &fnspec, { cgraph_node *node = e->caller->inlined_to ? e->caller->inlined_to : e->caller; - class ipa_node_params *caller_parms_info = IPA_NODE_REF (node); - class ipa_edge_args *args = IPA_EDGE_REF (e); + ipa_node_params *caller_parms_info = ipa_node_params_sum->get (node); + ipa_edge_args *args = ipa_edge_args_sum->get (e); struct ipa_jump_func *jf = ipa_get_ith_jump_func (args, size_arg); if (jf) diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c index 5354ce03923..ce32b538976 100644 --- a/gcc/ipa-profile.c +++ b/gcc/ipa-profile.c @@ -740,10 +740,10 @@ check_argument_count (struct cgraph_node *n, struct cgraph_edge *e) { if (!ipa_node_params_sum || !ipa_edge_args_sum) return true; - class ipa_node_params *info = IPA_NODE_REF (n->function_symbol ()); + ipa_node_params *info = ipa_node_params_sum->get (n->function_symbol ()); if (!info) return true; - ipa_edge_args *e_info = IPA_EDGE_REF (e); + ipa_edge_args *e_info = ipa_edge_args_sum->get (e); if (!e_info) return true; if (ipa_get_param_count (info) != ipa_get_cs_argument_count (e_info) diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 02c483b10dd..0591ef1b569 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -276,7 +276,7 @@ ipa_dump_param (FILE *file, class ipa_node_params *info, int i) static bool ipa_alloc_node_params (struct cgraph_node *node, int param_count) { - class ipa_node_params *info = IPA_NODE_REF_GET_CREATE (node); + ipa_node_params *info = ipa_node_params_sum->get_create (node); if (!info->descriptors && param_count) { @@ -294,7 +294,7 @@ ipa_alloc_node_params (struct cgraph_node *node, int param_count) void ipa_initialize_node_params (struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF_GET_CREATE (node); + ipa_node_params *info = ipa_node_params_sum->get_create (node); if (!info->descriptors && ipa_alloc_node_params (node, count_formal_params (node->decl))) @@ -306,15 +306,15 @@ ipa_initialize_node_params (struct cgraph_node *node) static void ipa_print_node_jump_functions_for_edge (FILE *f, struct cgraph_edge *cs) { - int i, count; + ipa_edge_args *args = ipa_edge_args_sum->get (cs); + int count = ipa_get_cs_argument_count (args); - count = ipa_get_cs_argument_count (IPA_EDGE_REF (cs)); - for (i = 0; i < count; i++) + for (int i = 0; i < count; i++) { struct ipa_jump_func *jump_func; enum jump_func_type type; - jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i); + jump_func = ipa_get_ith_jump_func (args, i); type = jump_func->type; fprintf (f, " param %d: ", i); @@ -410,7 +410,7 @@ ipa_print_node_jump_functions_for_edge (FILE *f, struct cgraph_edge *cs) } class ipa_polymorphic_call_context *ctx - = ipa_get_ith_polymorhic_call_context (IPA_EDGE_REF (cs), i); + = ipa_get_ith_polymorhic_call_context (args, i); if (ctx && !ctx->useless_p ()) { fprintf (f, " Context: "); @@ -2232,8 +2232,8 @@ static void ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, struct cgraph_edge *cs) { - class ipa_node_params *info = IPA_NODE_REF (cs->caller); - class ipa_edge_args *args = IPA_EDGE_REF_GET_CREATE (cs); + ipa_node_params *info = ipa_node_params_sum->get (cs->caller); + ipa_edge_args *args = ipa_edge_args_sum->get_create (cs); gcall *call = cs->call_stmt; int n, arg_num = gimple_call_num_args (call); bool useful_context = false; @@ -2509,11 +2509,10 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, cs->indirect_info->agg_contents = 0; cs->indirect_info->member_ptr = 0; cs->indirect_info->guaranteed_unmodified = 0; - ipa_set_param_used_by_indirect_call (IPA_NODE_REF (node), - param_index, true); + ipa_node_params *info = ipa_node_params_sum->get (node); + ipa_set_param_used_by_indirect_call (info, param_index, true); if (cs->indirect_info->polymorphic || polymorphic) - ipa_set_param_used_by_polymorphic_call - (IPA_NODE_REF (node), param_index, true); + ipa_set_param_used_by_polymorphic_call (info, param_index, true); return cs; } @@ -2884,7 +2883,7 @@ ipa_analyze_params_uses_in_bb (struct ipa_func_body_info *fbi, basic_block bb) static void ipa_analyze_controlled_uses (struct cgraph_node *node) { - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); for (int i = 0; i < ipa_get_param_count (info); i++) { @@ -2980,7 +2979,7 @@ ipa_analyze_node (struct cgraph_node *node) ipa_check_create_node_params (); ipa_check_create_edge_args (); - info = IPA_NODE_REF_GET_CREATE (node); + info = ipa_node_params_sum->get_create (node); if (info->analysis_done) return; @@ -3003,7 +3002,7 @@ ipa_analyze_node (struct cgraph_node *node) ipa_analyze_controlled_uses (node); fbi.node = node; - fbi.info = IPA_NODE_REF (node); + fbi.info = info; fbi.bb_infos = vNULL; fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true); fbi.param_count = ipa_get_param_count (info); @@ -3036,8 +3035,8 @@ static void update_jump_functions_after_inlining (struct cgraph_edge *cs, struct cgraph_edge *e) { - class ipa_edge_args *top = IPA_EDGE_REF (cs); - class ipa_edge_args *args = IPA_EDGE_REF (e); + ipa_edge_args *top = ipa_edge_args_sum->get (cs); + ipa_edge_args *args = ipa_edge_args_sum->get (e); if (!args) return; int count = ipa_get_cs_argument_count (args); @@ -3889,11 +3888,11 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs, bool res = false; ipa_check_create_edge_args (); - top = IPA_EDGE_REF (cs); + top = ipa_edge_args_sum->get (cs); new_root = cs->caller->inlined_to ? cs->caller->inlined_to : cs->caller; - new_root_info = IPA_NODE_REF (new_root); - inlined_node_info = IPA_NODE_REF (cs->callee->function_symbol ()); + new_root_info = ipa_node_params_sum->get (new_root); + inlined_node_info = ipa_node_params_sum->get (cs->callee->function_symbol ()); for (ie = node->indirect_calls; ie; ie = next_ie) { @@ -3947,7 +3946,6 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs, && spec_targets.contains (new_direct_edge->callee)) { new_direct_edge->indirect_inlining_edge = 1; - top = IPA_EDGE_REF (cs); res = true; if (!new_direct_edge->speculative) continue; @@ -3960,7 +3958,6 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs, new_edges->safe_push (new_direct_edge); res = true; } - top = IPA_EDGE_REF (cs); /* If speculative edge was introduced we still need to update call info of the indirect edge. */ if (!new_direct_edge->speculative) @@ -4060,13 +4057,13 @@ combine_controlled_uses_counters (int c, int d) static void propagate_controlled_uses (struct cgraph_edge *cs) { - class ipa_edge_args *args = IPA_EDGE_REF (cs); + ipa_edge_args *args = ipa_edge_args_sum->get (cs); if (!args) return; struct cgraph_node *new_root = cs->caller->inlined_to ? cs->caller->inlined_to : cs->caller; - class ipa_node_params *new_root_info = IPA_NODE_REF (new_root); - class ipa_node_params *old_root_info = IPA_NODE_REF (cs->callee); + ipa_node_params *new_root_info = ipa_node_params_sum->get (new_root); + ipa_node_params *old_root_info = ipa_node_params_sum->get (cs->callee); int count, i; if (!old_root_info) @@ -4195,7 +4192,7 @@ ipa_propagate_indirect_call_infos (struct cgraph_edge *cs, changed = propagate_info_to_inlined_callees (cs, cs->callee, new_edges); ipa_node_params_sum->remove (cs->callee); - class ipa_edge_args *args = IPA_EDGE_REF (cs); + ipa_edge_args *args = ipa_edge_args_sum->get (cs); if (args) { bool ok = true; @@ -4403,7 +4400,7 @@ ipa_edge_args_sum_t::duplicate (cgraph_edge *src, cgraph_edge *dst, { struct cgraph_node *inline_root = dst->caller->inlined_to ? dst->caller->inlined_to : dst->caller; - class ipa_node_params *root_info = IPA_NODE_REF (inline_root); + ipa_node_params *root_info = ipa_node_params_sum->get (inline_root); int idx = ipa_get_jf_pass_through_formal_id (dst_jf); int c = ipa_get_controlled_uses (root_info, idx); @@ -4553,7 +4550,7 @@ ipa_print_node_params (FILE *f, struct cgraph_node *node) if (!node->definition) return; - info = IPA_NODE_REF (node); + info = ipa_node_params_sum->get (node); fprintf (f, " function %s parameter descriptors:\n", node->dump_name ()); if (!info) { @@ -4956,7 +4953,7 @@ ipa_write_node_info (struct output_block *ob, struct cgraph_node *node) { int node_ref; lto_symtab_encoder_t encoder; - class ipa_node_params *info = IPA_NODE_REF (node); + ipa_node_params *info = ipa_node_params_sum->get (node); int j; struct cgraph_edge *e; struct bitpack_d bp; @@ -4983,7 +4980,7 @@ ipa_write_node_info (struct output_block *ob, struct cgraph_node *node) } for (e = node->callees; e; e = e->next_callee) { - class ipa_edge_args *args = IPA_EDGE_REF (e); + ipa_edge_args *args = ipa_edge_args_sum->get (e); if (!args) { @@ -5003,7 +5000,7 @@ ipa_write_node_info (struct output_block *ob, struct cgraph_node *node) } for (e = node->indirect_calls; e; e = e->next_callee) { - class ipa_edge_args *args = IPA_EDGE_REF (e); + ipa_edge_args *args = ipa_edge_args_sum->get (e); if (!args) streamer_write_uhwi (ob, 0); else @@ -5041,7 +5038,7 @@ ipa_read_edge_info (class lto_input_block *ib, will get fnspecs. */ || fndecl_built_in_p (e->callee->decl, BUILT_IN_NORMAL))) { - class ipa_edge_args *args = IPA_EDGE_REF_GET_CREATE (e); + ipa_edge_args *args = ipa_edge_args_sum->get_create (e); vec_safe_grow_cleared (args->jump_functions, count, true); if (contexts_computed) vec_safe_grow_cleared (args->polymorphic_call_contexts, count, true); @@ -5080,8 +5077,8 @@ ipa_read_node_info (class lto_input_block *ib, struct cgraph_node *node, struct cgraph_edge *e; struct bitpack_d bp; bool prevails = node->prevailing_p (); - class ipa_node_params *info = prevails - ? IPA_NODE_REF_GET_CREATE (node) : NULL; + ipa_node_params *info + = prevails ? ipa_node_params_sum->get_create (node) : NULL; int param_count = streamer_read_uhwi (ib); if (prevails) @@ -5130,7 +5127,6 @@ ipa_read_node_info (class lto_input_block *ib, struct cgraph_node *node, void ipa_prop_write_jump_functions (void) { - struct cgraph_node *node; struct output_block *ob; unsigned int count = 0; lto_symtab_encoder_iterator lsei; @@ -5145,9 +5141,9 @@ ipa_prop_write_jump_functions (void) for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei); lsei_next_function_in_partition (&lsei)) { - node = lsei_cgraph_node (lsei); + cgraph_node *node = lsei_cgraph_node (lsei); if (node->has_gimple_body_p () - && IPA_NODE_REF (node) != NULL) + && ipa_node_params_sum->get (node) != NULL) count++; } @@ -5157,9 +5153,9 @@ ipa_prop_write_jump_functions (void) for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei); lsei_next_function_in_partition (&lsei)) { - node = lsei_cgraph_node (lsei); + cgraph_node *node = lsei_cgraph_node (lsei); if (node->has_gimple_body_p () - && IPA_NODE_REF (node) != NULL) + && ipa_node_params_sum->get (node) != NULL) ipa_write_node_info (ob, node); } streamer_write_char_stream (ob->main_stream, 0); diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 1f0e6c64873..3d28a6e8640 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -1017,16 +1017,6 @@ public: /* Function summary where the IPA CP transformations are actually stored. */ extern GTY(()) function_summary *ipcp_transformation_sum; -/* Return the associated parameter/argument info corresponding to the given - node/edge. */ -#define IPA_NODE_REF(NODE) (ipa_node_params_sum->get (NODE)) -#define IPA_NODE_REF_GET_CREATE(NODE) (ipa_node_params_sum->get_create (NODE)) -#define IPA_EDGE_REF(EDGE) (ipa_edge_args_sum->get (EDGE)) -#define IPA_EDGE_REF_GET_CREATE(EDGE) (ipa_edge_args_sum->get_create (EDGE)) -/* This macro checks validity of index returned by - ipa_get_param_decl_index function. */ -#define IS_VALID_JUMP_FUNC_INDEX(I) ((I) != -1) - /* Creating and freeing ipa_node_params and ipa_edge_args. */ void ipa_create_all_node_params (void); void ipa_create_all_edge_args (void);