Hi,
My patch to fix profile after folding internal call is missing check for the
case profile was already zero before if-conversion.

Bootstrapped/regtested x86_64-linux, comitted.

gcc/ChangeLog:

        PR gcov-profile/110988
        * tree-cfg.cc (fold_loop_internal_call): Avoid division by zero.

diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index ab1f8067c54..105f4b1c953 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -7734,11 +7734,14 @@ fold_loop_internal_call (gimple *g, tree value)
                 test.  This should not happen as the guarded code should
                 start with pre-header.  */
              gcc_assert (single_pred_edge (taken_edge->dest));
-             taken_edge->dest->count
-               = taken_edge->dest->count.apply_scale (new_count,
-                                                      old_count);
-             scale_strictly_dominated_blocks (taken_edge->dest,
-                                              new_count, old_count);
+             if (old_count.nonzero_p ())
+               {
+                 taken_edge->dest->count
+                   = taken_edge->dest->count.apply_scale (new_count,
+                                                          old_count);
+                 scale_strictly_dominated_blocks (taken_edge->dest,
+                                                  new_count, old_count);
+               }
            }
        }
     }

Reply via email to