From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75239 invoked by alias); 24 Jul 2019 13:03:07 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 75224 invoked by uid 89); 24 Jul 2019 13:03:07 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.1 spammy=sk:expand_, sk:param_a, cloning, sk:duplica X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 24 Jul 2019 13:03:02 +0000 X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "Cc" Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id D4C1AAE21 for ; Wed, 24 Jul 2019 13:02:59 +0000 (UTC) From: Martin Jambor To: GCC Patches Cc: Jan Hubicka Cc: Subject: Re: [PATCH 2/4] New parameter manipulation infrastructure In-Reply-To: <9d526176d66c53e25de22b7c407bb4c5292ef982.1563901251.git.mjambor@suse.cz> References: <9d526176d66c53e25de22b7c407bb4c5292ef982.1563901251.git.mjambor@suse.cz> User-Agent: Notmuch/0.29.1 (https://notmuchmail.org) Emacs/26.2 (x86_64-suse-linux-gnu) Date: Wed, 24 Jul 2019 13:19:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2019-07/txt/msg01568.txt.bz2 Hello, On Tue, Jul 23 2019, Martin Jambor wrote: > This patch adds the capability to split parameters directly to the > call graph cloning infrastructure, while still allowing omp-simd to > clone functions on its own. Please see the cover letter for the whole > IPA-SRA patch-set for more details. > > Martin > > 2019-07-23 Martin Jambor > > * Makefile.in (GTFILES): Added ipa-param-manipulation.h. > * cgraph.h (ipa_replace_map): Removed fields old_tree, replace_p > and ref_p, added fields param_adjustments and performed_splits. > (struct cgraph_clone_info): Remove ags_to_skip and > combined_args_to_skip, new field param_adjustments. > (cgraph_node::create_clone): Changed parameters to use > ipa_param_adjustments. > (cgraph_node::create_virtual_clone): Likewise. > (cgraph_node::create_virtual_clone_with_body): Likewise. > (tree_function_versioning): Likewise. > (cgraph_build_function_type_skip_args): Removed. > * cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Convert to > using ipa_param_adjustments. > (clone_of_p): Likewise. > * cgraphclones.c (cgraph_build_function_type_skip_args): Removed. > (build_function_decl_skip_args): Likewise. > (duplicate_thunk_for_node): Adjust parameters using > ipa_param_body_adjustments, copy param_adjustments instead of > args_to_skip. > (cgraph_node::create_clone): Convert to using ipa_param_adjustments. > (cgraph_node::create_virtual_clone): Likewise. > (cgraph_node::create_version_clone_with_body): Likewise. > (cgraph_materialize_clone): Likewise. > (symbol_table::materialize_all_clones): Likewise. > * coretypes.h (cgraph_edge): Declare. > * ipa-cp.c (get_replacement_map): Do not initialize removed fields. > (initialize_node_lattices): Make aware that some parameters might have > already been removed. > (want_remove_some_param_p): New function. > (create_specialized_node): Convert to using ipa_param_adjustments and > deal with possibly pre-existing adjustments. > * ipa-fnsummary.c (ipa_fn_summary_t::duplicate): Simplify > ipa_replace_map check. > * ipa-inline-transform.c (save_inline_function_body): Update to > refelct new tree_function_versioning signature. > * ipa-param-manipulation.c: Rewrite. > * ipa-param-manipulation.h: Likewise. > * ipa-prop.c (adjust_agg_replacement_values): Use a helper from > ipa_param_adjustments to get current parameter indices. > (ipcp_modif_dom_walker::before_dom_children): Likewise. > (ipcp_update_bits): Likewise. > (ipcp_update_vr): Likewise. > * ipa-split.c (split_function): Convert to using ipa_param_adjustments. > * lto-cgraph.c (output_cgraph_opt_summary_p): Likewise. > (output_node_opt_summary): Do not stream removed fields. Stream > parameter adjustments instead of argumetns to skip. > (input_node_opt_summary): Likewise. > (input_node_opt_summary): Likewise. > * multiple_target.c (create_target_clone): Update to reflet new type > of create_version_clone_with_body. > * omp-simd-clone.c (simd_clone_vector_of_formal_parm_types): Adjust > for the new interface. > (simd_clone_clauses_extract): Likewise, make args an auto_vec. > (simd_clone_compute_base_data_type): Likewise. > (simd_clone_init_simd_arrays): Adjust for the new interface. > (simd_clone_adjust_argument_types): Likewise. > (struct modify_stmt_info): Likewise. > (ipa_simd_modify_stmt_ops): Likewise. > (ipa_simd_modify_function_body): Likewise. > (simd_clone_adjust): Likewise. > * trans-mem.c (ipa_tm_create_version): Update to reflect new type of > tree_function_versioning. > * tree-inline.h (copy_body_data): New fields killed_new_ssa_names and > param_body_adjs. > (copy_decl_to_var): Declare. > * tree-inline.c (update_clone_info): Do not remap old_tree. > (remap_gimple_stmt): Use ipa_param_body_adjustments to modify gimple > statements, walk all extra generated statements and remap their > operands. > (redirect_all_calls): Add killed SSA names to a hash set. > (remap_ssa_name): Do not remap killed SSA names. > (copy_arguments_for_versioning): Renames to copy_arguments_nochange, > half of functionality moved to ipa_param_body_adjustments. > (copy_decl_to_var): Make exported. > (copy_body): Destroy killed_new_ssa_names hash set. > (expand_call_inline): Remap performed splits. > (update_clone_info): Likewise. > (tree_function_versioning): Simplify tree_map processing. Updated to > accept ipa_param_adjustments and use ipa_param_body_adjustments. Honza's experiments with Firefox building already found one bug, we cannot rely on an edge surviving accross a call to edge->redirect_call_stmt_to_callee (umm, yes, it frees its this pointer). Fortunately, all we need is the new call statement that is returned by the function, so the following is needed on top of the patch from yesterday. Martin diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index e156f60ba2a..eddcef69505 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -2897,14 +2897,14 @@ redirect_all_calls (copy_body_data * id, basic_block bb) struct cgraph_edge *edge = id->dst_node->get_edge (stmt); if (edge) { - edge->redirect_call_stmt_to_callee (); + gimple *new_stmt = edge->redirect_call_stmt_to_callee (); /* If IPA-SRA transformation, run as part of edge redirection, removed the LHS because it is unused, save it to killed_new_ssa_names so that we can prune it from debug statements. */ if (old_lhs && TREE_CODE (old_lhs) == SSA_NAME - && !gimple_call_lhs (edge->call_stmt)) + && !gimple_call_lhs (new_stmt)) { if (!id->killed_new_ssa_names) id->killed_new_ssa_names = new hash_set (16);