https://gcc.gnu.org/g:a52484f1ac34dbb604dc862407d9abb32df444dd

commit r16-1968-ga52484f1ac34dbb604dc862407d9abb32df444dd
Author: Jan Hubicka <hubi...@ucw.cz>
Date:   Thu Jul 3 11:56:28 2025 +0200

    Fix division by zero in ipa-cp.cc:update_profiling_info
    
    This ICE has triggered for me during autoprofiledbootstrap.  The
    code already takes into care possible range, so I think in this case
    we can just push to one side of it.
    
    Bootstrapped/regtesed x86_64-linux, OK?
    
    gcc/ChangeLog:
    
            * ipa-cp.cc (update_profiling_info): Watch for division by zero.

Diff:
---
 gcc/ipa-cp.cc | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index 901d4a5616e9..480cf48786c7 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -4838,11 +4838,12 @@ update_profiling_info (struct cgraph_node *orig_node,
       profile_count unexp = orig_node_count - new_sum - orig_nonrec_call_count;
 
       int limit_den = 2 * (orig_nonrec_calls + new_nonrec_calls);
-      profile_count new_part
-       = MAX(MIN (unexp.apply_scale (new_sum,
-                                     new_sum + orig_nonrec_call_count),
-                  unexp.apply_scale (limit_den - 1, limit_den)),
-             unexp.apply_scale (new_nonrec_calls, limit_den));
+      profile_count new_part = unexp.apply_scale (limit_den - 1, limit_den);
+      profile_count den = new_sum + orig_nonrec_call_count;
+      if (den.nonzero_p ())
+       new_part = MIN (unexp.apply_scale (new_sum, den), new_part);
+      new_part = MAX (new_part,
+                     unexp.apply_scale (new_nonrec_calls, limit_den));
       if (dump_file)
        {
          fprintf (dump_file, "       Claiming ");

Reply via email to