aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-ifcombine.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2018-11-28 21:34:06 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2018-11-28 20:34:06 +0000
commit9c7a7155ec779fb56f462cb9b932ad09bc56c92a (patch)
treebc57de7d1314bd8ef95aa30587f08d683a5e6512 /gcc/tree-ssa-ifcombine.c
parentf0dbeec7c506407aa7e02cc2df82057ea40ab457 (diff)
downloadgcc-9c7a7155ec779fb56f462cb9b932ad09bc56c92a.zip
gcc-9c7a7155ec779fb56f462cb9b932ad09bc56c92a.tar.gz
gcc-9c7a7155ec779fb56f462cb9b932ad09bc56c92a.tar.bz2
tree-ssa-ifcombine.c (update_profile_after_ifcombine): Handle profile_probability::always better.
* tree-ssa-ifcombine.c (update_profile_after_ifcombine): Handle profile_probability::always better. From-SVN: r266585
Diffstat (limited to 'gcc/tree-ssa-ifcombine.c')
-rw-r--r--gcc/tree-ssa-ifcombine.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c
index b63c600..2b96937 100644
--- a/gcc/tree-ssa-ifcombine.c
+++ b/gcc/tree-ssa-ifcombine.c
@@ -360,8 +360,15 @@ update_profile_after_ifcombine (basic_block inner_cond_bb,
inner_cond_bb->count = outer_cond_bb->count;
- inner_taken->probability = outer2->probability + outer_to_inner->probability
- * inner_taken->probability;
+ /* Handle special case where inner_taken probability is always. In this case
+ we know that the overall outcome will be always as well, but combining
+ probabilities will be conservative because it does not know that
+ outer2->probability is inverse of outer_to_inner->probability. */
+ if (inner_taken->probability == profile_probability::always ())
+ ;
+ else
+ inner_taken->probability = outer2->probability + outer_to_inner->probability
+ * inner_taken->probability;
inner_not_taken->probability = profile_probability::always ()
- inner_taken->probability;