aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2017-07-16 18:36:48 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2017-07-16 16:36:48 +0000
commit109bb9be651660bd3624509880c5cb487698a2e9 (patch)
treeeed7bdd0d029b5679e30cd5b47a3f2138e20e1bd /gcc
parentb2ff44a8ebcc67ba914ce3bd60eafec23da5bff8 (diff)
downloadgcc-109bb9be651660bd3624509880c5cb487698a2e9.zip
gcc-109bb9be651660bd3624509880c5cb487698a2e9.tar.gz
gcc-109bb9be651660bd3624509880c5cb487698a2e9.tar.bz2
* cgraph.c (cgraph_edge::redirect_call_stmt_to_caller): Cleanup.
From-SVN: r250243
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/cgraph.c22
2 files changed, 15 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ccceea5..c6491ffa 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2017-07-16 Jan Hubicka <hubicka@ucw.cz>
+ * cgraph.c (cgraph_edge::redirect_call_stmt_to_caller): Cleanup.
+
+2017-07-16 Jan Hubicka <hubicka@ucw.cz>
+
* cfgloopmanip.c (scale_loop_profile): Avoid use of REG_BR_PROB_BASE
fixpoint arithmetics.
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 6711aeb..2f820f1 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1315,19 +1315,19 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
}
gcc_assert (e2->speculative);
push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
+
+ profile_probability prob = e->count.probability_in (e->count
+ + e2->count);
+ if (prob.initialized_p ())
+ ;
+ else if (e->frequency || e2->frequency)
+ prob = profile_probability::probability_in_gcov_type
+ (e->frequency, e->frequency + e2->frequency).guessed ();
+ else
+ prob = profile_probability::even ();
new_stmt = gimple_ic (e->call_stmt,
dyn_cast<cgraph_node *> (ref->referred),
- /* FIXME: cleanup. */
- profile_probability::from_reg_br_prob_base (
- e->count > profile_count::zero ()
- || e2->count > profile_count::zero ()
- ? e->count.probability_in
- (e->count + e2->count).to_reg_br_prob_base ()
- : e->frequency || e2->frequency
- ? RDIV (e->frequency * REG_BR_PROB_BASE,
- e->frequency + e2->frequency)
- : REG_BR_PROB_BASE / 2),
- e->count, e->count + e2->count);
+ prob, e->count, e->count + e2->count);
e->speculative = false;
e->caller->set_call_stmt_including_clones (e->call_stmt, new_stmt,
false);