From 26f1a658e6308da5a7b804391c624acc3b1bee74 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 4 May 2017 15:57:35 +0200 Subject: [PATCH] ipa-cp.c (perform_estimation_of_a_value): Drop base_time parameter; update use of estimate_ipcp_clone_size_and_time. * ipa-cp.c (perform_estimation_of_a_value): Drop base_time parameter; update use of estimate_ipcp_clone_size_and_time. (estimate_local_effects): Update use of estimate_ipcp_clone_size_and_time and perform_estimation_of_a_value. * ipa-inline.h (estimate_ipcp_clone_size_and_time): Update prototype. * ipa-inline-analysis.c (estimate_ipcp_clone_size_and_time): Return nonspecialized time. * gcc.dg/ipa/ipcp-2.c: Decrease ipcp threshold * gcc.dg/tree-ssa/ipa-cp-1.c: Likewise. From-SVN: r247597 --- gcc/ChangeLog | 10 +++++++++ gcc/ipa-cp.c | 28 ++++++++++++------------ gcc/ipa-inline-analysis.c | 4 ++-- gcc/ipa-inline.h | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/ipa/ipcp-2.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c | 2 +- 7 files changed, 35 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b87dc25a4c5..c9e34c017b9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2017-05-04 Jan Hubicka + + * ipa-cp.c (perform_estimation_of_a_value): Drop base_time parameter; + update use of estimate_ipcp_clone_size_and_time. + (estimate_local_effects): Update use of + estimate_ipcp_clone_size_and_time and perform_estimation_of_a_value. + * ipa-inline.h (estimate_ipcp_clone_size_and_time): Update prototype. + * ipa-inline-analysis.c (estimate_ipcp_clone_size_and_time): + Return nonspecialized time. + 2017-05-04 Richard Biener * tree-ssa-alias.c (get_continuation_for_phi): Improve looking diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 0b2cd630ee2..5e1d94c67c7 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -2792,16 +2792,16 @@ static void perform_estimation_of_a_value (cgraph_node *node, vec known_csts, vec known_contexts, vec known_aggs_ptrs, - sreal base_time, int removable_params_cost, + int removable_params_cost, int est_move_cost, ipcp_value_base *val) { int size, time_benefit; - sreal time; + sreal time, base_time; inline_hints hints; estimate_ipcp_clone_size_and_time (node, known_csts, known_contexts, known_aggs_ptrs, &size, &time, - &hints); + &base_time, &hints); base_time -= time; if (base_time > 65535) base_time = 65535; @@ -2836,15 +2836,14 @@ estimate_local_effects (struct cgraph_node *node) vec known_aggs; vec known_aggs_ptrs; bool always_const; - sreal base_time = inline_summaries->get (node)->time.to_int (); int removable_params_cost; if (!count || !ipcp_versionable_function_p (node)) return; if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "\nEstimating effects for %s/%i, base_time: %f.\n", - node->name (), node->order, base_time.to_double ()); + fprintf (dump_file, "\nEstimating effects for %s/%i.\n", + node->name (), node->order); always_const = gather_context_independent_values (info, &known_csts, &known_contexts, &known_aggs, @@ -2857,14 +2856,15 @@ estimate_local_effects (struct cgraph_node *node) { struct caller_statistics stats; inline_hints hints; - sreal time; + sreal time, base_time; int size; init_caller_stats (&stats); node->call_for_symbol_thunks_and_aliases (gather_caller_stats, &stats, false); estimate_ipcp_clone_size_and_time (node, known_csts, known_contexts, - known_aggs_ptrs, &size, &time, &hints); + known_aggs_ptrs, &size, &time, + &base_time, &hints); time -= devirt_bonus; time -= hint_time_bonus (hints); time -= removable_params_cost; @@ -2877,20 +2877,20 @@ estimate_local_effects (struct cgraph_node *node) if (size <= 0 || node->local.local) { info->do_clone_for_all_contexts = true; - base_time = time; if (dump_file) fprintf (dump_file, " Decided to specialize for all " "known contexts, code not going to grow.\n"); } - else if (good_cloning_opportunity_p (node, (base_time - time).to_int (), + else if (good_cloning_opportunity_p (node, + MAX ((base_time - time).to_int (), + 65536), stats.freq_sum, stats.count_sum, size)) { if (size + overall_size <= max_new_size) { info->do_clone_for_all_contexts = true; - base_time = time; overall_size += size; if (dump_file) @@ -2926,7 +2926,7 @@ estimate_local_effects (struct cgraph_node *node) int emc = estimate_move_cost (TREE_TYPE (val->value), true); perform_estimation_of_a_value (node, known_csts, known_contexts, - known_aggs_ptrs, base_time, + known_aggs_ptrs, removable_params_cost, emc, val); if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2961,7 +2961,7 @@ estimate_local_effects (struct cgraph_node *node) { known_contexts[i] = val->value; perform_estimation_of_a_value (node, known_csts, known_contexts, - known_aggs_ptrs, base_time, + known_aggs_ptrs, removable_params_cost, 0, val); if (dump_file && (dump_flags & TDF_DETAILS)) @@ -3005,7 +3005,7 @@ estimate_local_effects (struct cgraph_node *node) vec_safe_push (ajf->items, item); perform_estimation_of_a_value (node, known_csts, known_contexts, - known_aggs_ptrs, base_time, + known_aggs_ptrs, removable_params_cost, 0, val); if (dump_file && (dump_flags & TDF_DETAILS)) diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 47d50507f94..ec6f2ac6972 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -3478,17 +3478,17 @@ estimate_ipcp_clone_size_and_time (struct cgraph_node *node, known_contexts, vec known_aggs, int *ret_size, sreal *ret_time, + sreal *ret_nonspec_time, inline_hints *hints) { clause_t clause, nonspec_clause; - sreal nonspec_time; evaluate_conditions_for_known_args (node, false, known_vals, known_aggs, &clause, &nonspec_clause); estimate_node_size_and_time (node, clause, nonspec_clause, known_vals, known_contexts, known_aggs, ret_size, NULL, ret_time, - &nonspec_time, hints, vNULL); + ret_nonspec_time, hints, vNULL); } /* Translate all conditions from callee representation into caller diff --git a/gcc/ipa-inline.h b/gcc/ipa-inline.h index 9027100f85a..ef52ca2eac9 100644 --- a/gcc/ipa-inline.h +++ b/gcc/ipa-inline.h @@ -272,7 +272,8 @@ void estimate_ipcp_clone_size_and_time (struct cgraph_node *, vec, vec, vec, - int *, sreal *, inline_hints *); + int *, sreal *, sreal *, + inline_hints *); int estimate_growth (struct cgraph_node *); bool growth_likely_positive (struct cgraph_node *, int); void inline_merge_summary (struct cgraph_edge *edge); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index edf2247543a..00f1cf245b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-05-04 Jan Hubicka + + * gcc.dg/ipa/ipcp-2.c: Decrease ipcp threshold + * gcc.dg/tree-ssa/ipa-cp-1.c: Likewise. + 2017-05-04 Richard Biener * gcc.dg/tree-ssa/ssa-fre-58.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-2.c b/gcc/testsuite/gcc.dg/ipa/ipcp-2.c index ca816a3380c..c9e71eb810a 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipcp-2.c +++ b/gcc/testsuite/gcc.dg/ipa/ipcp-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ +/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=100" } */ /* { dg-add-options bind_pic_locally } */ extern int get_stuff (int); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c index d9175dc0b25..61878b79313 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-tree-optimized -fno-inline" } */ +/* { dg-options "-O3 -fdump-tree-optimized -fno-inline --param ipa-cp-eval-threshold=100" } */ /* { dg-add-options bind_pic_locally } */ int -- 2.30.2