aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2023-07-27 15:58:52 +0200
committerJan Hubicka <jh@suse.cz>2023-07-27 15:58:52 +0200
commit5b06b3b8771d0dc06426986be32b8599e97bb451 (patch)
treef7590fbe8766ab3e6bf9dd7acc200f21e7fb5277
parent499b8079a6419bb8082de062ec30772296c6700c (diff)
downloadgcc-5b06b3b8771d0dc06426986be32b8599e97bb451.zip
gcc-5b06b3b8771d0dc06426986be32b8599e97bb451.tar.gz
gcc-5b06b3b8771d0dc06426986be32b8599e97bb451.tar.bz2
Fix profile update in tree-ssa-loop-im.cc
This fixes two bugs in tree-ssa-loop-im.cc. First is that cap probability is not reliable, but it is constructed with adjusted quality. Second is that sometimes the conditional has wrong joiner BB count. This is visible on testsuite/gcc.dg/pr102385.c however the testcase triggers another profile update bug in pcom, so I will update it in followup patch. gcc/ChangeLog: * tree-ssa-loop-im.cc (execute_sm_if_changed): Turn cap probability to guessed; fix count of new_bb.
-rw-r--r--gcc/tree-ssa-loop-im.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-im.cc b/gcc/tree-ssa-loop-im.cc
index f5b01e9..268f466 100644
--- a/gcc/tree-ssa-loop-im.cc
+++ b/gcc/tree-ssa-loop-im.cc
@@ -2059,7 +2059,8 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag,
nbbs++;
}
- profile_probability cap = profile_probability::always ().apply_scale (2, 3);
+ profile_probability cap
+ = profile_probability::guessed_always ().apply_scale (2, 3);
if (flag_probability.initialized_p ())
;
@@ -2103,6 +2104,8 @@ execute_sm_if_changed (edge ex, tree mem, tree tmp_var, tree flag,
old_dest = ex->dest;
new_bb = split_edge (ex);
+ if (append_cond_position)
+ new_bb->count += last_cond_fallthru->count ();
then_bb = create_empty_bb (new_bb);
then_bb->count = new_bb->count.apply_probability (flag_probability);
if (irr)