From cffe9a83e3f7d5fd8b6b8f20b6ab84b2d75381c3 Mon Sep 17 00:00:00 2001 From: hubicka Date: Thu, 16 Nov 2017 16:50:47 +0000 Subject: [PATCH] * ipa-fnsummary.c (analyze_function_body): Accumulate time consistently in sreal. * gcc.dg/ipa/ipcp-2.c: Lower threshold. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254834 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/ipa-fnsummary.c | 17 +++++++---------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/ipa/ipcp-2.c | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ad2d99455b..9c1eb3d46d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2017-11-16 Jan Hubicka + * ipa-fnsummary.c (analyze_function_body): Accumulate time consistently + in sreal. + +2017-11-16 Jan Hubicka + * predict.c (combine_predictions_for_bb): Preserve zero predicted eges. (expensive_function_p): Remove useless assert. diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c index 8e26e7e257a..1b99194a267 100644 --- a/gcc/ipa-fnsummary.c +++ b/gcc/ipa-fnsummary.c @@ -1986,7 +1986,7 @@ analyze_function_body (struct cgraph_node *node, bool early) <0,2>. */ basic_block bb; struct function *my_function = DECL_STRUCT_FUNCTION (node->decl); - int freq; + sreal freq; struct ipa_fn_summary *info = ipa_fn_summaries->get (node); predicate bb_predicate; struct ipa_func_body_info fbi; @@ -2052,7 +2052,7 @@ analyze_function_body (struct cgraph_node *node, bool early) for (n = 0; n < nblocks; n++) { bb = BASIC_BLOCK_FOR_FN (cfun, order[n]); - freq = compute_call_stmt_bb_frequency (node->decl, bb); + freq = bb->count.to_sreal_scale (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count); if (clobber_only_eh_bb_p (bb)) { if (dump_file && (dump_flags & TDF_DETAILS)) @@ -2127,7 +2127,7 @@ analyze_function_body (struct cgraph_node *node, bool early) fprintf (dump_file, " "); print_gimple_stmt (dump_file, stmt, 0); fprintf (dump_file, "\t\tfreq:%3.2f size:%3i time:%3i\n", - ((double) freq) / CGRAPH_FREQ_BASE, this_size, + freq.to_double (), this_size, this_time); } @@ -2201,7 +2201,7 @@ analyze_function_body (struct cgraph_node *node, bool early) will_be_nonconstant = true; if (this_time || this_size) { - this_time *= freq; + sreal final_time = (sreal)this_time * freq; prob = eliminated_by_inlining_prob (stmt); if (prob == 1 && dump_file && (dump_flags & TDF_DETAILS)) @@ -2218,7 +2218,7 @@ analyze_function_body (struct cgraph_node *node, bool early) if (*(is_gimple_call (stmt) ? &bb_predicate : &p) != false) { - time += this_time; + time += final_time; size += this_size; } @@ -2231,14 +2231,12 @@ analyze_function_body (struct cgraph_node *node, bool early) { predicate ip = bb_predicate & predicate::not_inlined (); info->account_size_time (this_size * prob, - (sreal)(this_time * prob) - / (CGRAPH_FREQ_BASE * 2), ip, + (this_time * prob) / 2, ip, p); } if (prob != 2) info->account_size_time (this_size * (2 - prob), - (sreal)(this_time * (2 - prob)) - / (CGRAPH_FREQ_BASE * 2), + (this_time * (2 - prob) / 2), bb_predicate, p); } @@ -2256,7 +2254,6 @@ analyze_function_body (struct cgraph_node *node, bool early) } } set_hint_predicate (&ipa_fn_summaries->get (node)->array_index, array_index); - time = time / CGRAPH_FREQ_BASE; free (order); if (nonconstant_names.exists () && !early) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a932323e5d3..d8db9acb468 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-11-16 Jan Hubicka + + * gcc.dg/ipa/ipcp-2.c: Lower threshold. + 2017-11-16 Martin Sebor PR middle-end/63477 diff --git a/gcc/testsuite/gcc.dg/ipa/ipcp-2.c b/gcc/testsuite/gcc.dg/ipa/ipcp-2.c index c9e71eb810a..6b6fc4e4318 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 --param ipa-cp-eval-threshold=100" } */ +/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining --param ipa-cp-eval-threshold=80" } */ /* { dg-add-options bind_pic_locally } */ extern int get_stuff (int); -- 2.11.4.GIT