]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
value-prof.cc: Correct edge prob calculation.
authorFilip Kastl <filip.kastl@gmail.com>
Wed, 5 Jul 2023 15:36:02 +0000 (17:36 +0200)
committerFilip Kastl <filip.kastl@gmail.com>
Wed, 5 Jul 2023 15:36:02 +0000 (17:36 +0200)
The mod-subtract optimization with ncounts==1 produced incorrect edge
probabilities due to incorrect conditional probability calculation. This
patch fixes the calculation.

Signed-off-by: Filip Kastl <filip.kastl@gmail.com>
gcc/ChangeLog:

* value-prof.cc (gimple_mod_subtract_transform): Correct edge
prob calculation.

gcc/value-prof.cc

index f40e58ac4f24b585fc1f3bd7fc3708eada1b1a1f..5033a6f6aec390154f51fe907d90af2c96c2ace1 100644 (file)
@@ -1186,7 +1186,11 @@ gimple_mod_subtract_transform (gimple_stmt_iterator *si)
   if (all > 0)
     {
       prob1 = profile_probability::probability_in_gcov_type (count1, all);
-      prob2 = profile_probability::probability_in_gcov_type (count2, all);
+      if (all == count1)
+       prob2 = profile_probability::even ();
+      else
+       prob2 = profile_probability::probability_in_gcov_type (count2, all
+                                                              - count1);
     }
   else
     {