New IPA-SRA
authorMartin Jambor <mjambor@suse.cz>
Thu, 19 Sep 2019 22:25:04 +0000 (00:25 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Thu, 19 Sep 2019 22:25:04 +0000 (00:25 +0200)
commitff6686d2e5f797d6c6a36ad14a7084bc1dc350e4
tree21de4e26dd766dab8b60b2be7190a6b86bad2b38
parent6889a3acfeed47265886676c6d43b04ef799fb82
New IPA-SRA

2019-09-20  Martin Jambor  <mjambor@suse.cz>

        * coretypes.h (cgraph_edge): Declare.
        * ipa-param-manipulation.c: Rewrite.
        * ipa-param-manipulation.h: Likewise.
        * Makefile.in (GTFILES): Added ipa-param-manipulation.h and ipa-sra.c.
        (OBJS): Added ipa-sra.o.
        * 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.
        * ipa-fnsummary.c (ipa_fn_summary_t::duplicate): Simplify
        ipa_replace_map check.
        * 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.
        * 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.
        * lto-section-in.c (lto_section_name): Added ipa-sra section.
        * lto-streamer.h (lto_section_type): Likewise.
        * 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.
        * 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.
        * tree-sra.c: Removed IPA-SRA.  Include tree-sra.h.
        (type_internals_preclude_sra_p): Make public.
        * tree-sra.h: New file.
        * ipa-inline-transform.c (save_inline_function_body): Update to
        refelct new tree_function_versioning signature.
        * 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.
        * ipa-sra.c: New file.
        * multiple_target.c (create_target_clone): Update to reflet new type
        of create_version_clone_with_body.
        * trans-mem.c (ipa_tm_create_version): Update to reflect new type of
        tree_function_versioning.
(modify_function): Update to reflect new type of
tree_function_versioning.
        * params.def (PARAM_IPA_SRA_MAX_REPLACEMENTS): New.
        * passes.def: Remove old IPA-SRA and add new one.
        * tree-pass.h (make_pass_early_ipa_sra): Remove declaration.
        (make_pass_ipa_sra): Declare.
* dbgcnt.def: Remove eipa_sra.  Added ipa_sra_params and
ipa_sra_retvalues.
* doc/invoke.texi (ipa-sra-max-replacements): New.

        testsuite/
        * g++.dg/ipa/pr81248.C: Adjust dg-options and dump-scan.
        * gcc.dg/ipa/ipa-sra-1.c: Likewise.
        * gcc.dg/ipa/ipa-sra-10.c: Likewise.
        * gcc.dg/ipa/ipa-sra-11.c: Likewise.
        * gcc.dg/ipa/ipa-sra-3.c: Likewise.
        * gcc.dg/ipa/ipa-sra-4.c: Likewise.
        * gcc.dg/ipa/ipa-sra-5.c: Likewise.
        * gcc.dg/ipa/ipacost-2.c: Disable ipa-sra.
        * gcc.dg/ipa/ipcp-agg-9.c: Likewise.
        * gcc.dg/ipa/pr78121.c: Adjust scan pattern.
        * gcc.dg/ipa/vrp1.c: Likewise.
        * gcc.dg/ipa/vrp2.c: Likewise.
        * gcc.dg/ipa/vrp3.c: Likewise.
        * gcc.dg/ipa/vrp7.c: Likewise.
        * gcc.dg/ipa/vrp8.c: Likewise.
        * gcc.dg/noreorder.c: use noipa attribute instead of noinline.
        * gcc.dg/ipa/20040703-wpa.c: New test.
* gcc.dg/ipa/ipa-sra-12.c: New test.
* gcc.dg/ipa/ipa-sra-13.c: Likewise.
* gcc.dg/ipa/ipa-sra-14.c: Likewise.
* gcc.dg/ipa/ipa-sra-15.c: Likewise.
* gcc.dg/ipa/ipa-sra-16.c: Likewise.
* gcc.dg/ipa/ipa-sra-17.c: Likewise.
* gcc.dg/ipa/ipa-sra-18.c: Likewise.
* gcc.dg/ipa/ipa-sra-19.c: Likewise.
* gcc.dg/ipa/ipa-sra-20.c: Likewise.
* gcc.dg/ipa/ipa-sra-21.c: Likewise.
* gcc.dg/ipa/ipa-sra-22.c: Likewise.
* gcc.dg/sso/ipa-sra-1.c: Likewise.
* g++.dg/ipa/ipa-sra-2.C: Likewise.
* g++.dg/ipa/ipa-sra-3.C: Likewise.
* gcc.dg/tree-ssa/ipa-cp-1.c: Make return value used.
* g++.dg/ipa/devirt-19.C: Add missing return, add -fipa-cp-clone
option.
* g++.dg/lto/devirt-19_0.C: Add -fipa-cp-clone option.
* gcc.dg/ipa/ipa-sra-2.c: Removed.
* gcc.dg/ipa/ipa-sra-6.c: Likewise.

From-SVN: r275982
67 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphclones.c
gcc/coretypes.h
gcc/dbgcnt.def
gcc/doc/invoke.texi
gcc/ipa-cp.c
gcc/ipa-fnsummary.c
gcc/ipa-inline-transform.c
gcc/ipa-param-manipulation.c
gcc/ipa-param-manipulation.h
gcc/ipa-prop.c
gcc/ipa-split.c
gcc/ipa-sra.c [new file with mode: 0644]
gcc/lto-cgraph.c
gcc/lto-section-in.c
gcc/lto-streamer.h
gcc/multiple_target.c
gcc/omp-simd-clone.c
gcc/params.def
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ipa/devirt-19.C
gcc/testsuite/g++.dg/ipa/ipa-sra-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/ipa-sra-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/ipa-sra-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ipa/pr81248.C
gcc/testsuite/g++.dg/lto/devirt-19_0.C
gcc/testsuite/gcc.dg/ipa/20040703-wpa.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-1.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-10.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-11.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-12.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-13.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-14.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-15.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-16.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-17.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-18.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-19.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-2.c [deleted file]
gcc/testsuite/gcc.dg/ipa/ipa-sra-20.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-21.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-22.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/ipa-sra-3.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-4.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-5.c
gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c [deleted file]
gcc/testsuite/gcc.dg/ipa/ipacost-2.c
gcc/testsuite/gcc.dg/ipa/ipcp-agg-9.c
gcc/testsuite/gcc.dg/ipa/pr78121.c
gcc/testsuite/gcc.dg/ipa/vrp1.c
gcc/testsuite/gcc.dg/ipa/vrp2.c
gcc/testsuite/gcc.dg/ipa/vrp3.c
gcc/testsuite/gcc.dg/ipa/vrp7.c
gcc/testsuite/gcc.dg/ipa/vrp8.c
gcc/testsuite/gcc.dg/noreorder.c
gcc/testsuite/gcc.dg/sso/ipa-sra-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c
gcc/trans-mem.c
gcc/tree-inline.c
gcc/tree-inline.h
gcc/tree-pass.h
gcc/tree-sra.c
gcc/tree-sra.h [new file with mode: 0644]