aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.cc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2023-08-14 17:55:33 +0200
committerJan Hubicka <jh@suse.cz>2023-08-14 17:55:33 +0200
commit882af290c137dfab5d99b88e6dbecc5e75d85a0b (patch)
tree72682d2b9f8422b9706deddfe0064e1db03f18ae /gcc/tree-cfg.cc
parent7879f589af911ea6a910d08919014b0b2df1b4b1 (diff)
downloadgcc-882af290c137dfab5d99b88e6dbecc5e75d85a0b.zip
gcc-882af290c137dfab5d99b88e6dbecc5e75d85a0b.tar.gz
gcc-882af290c137dfab5d99b88e6dbecc5e75d85a0b.tar.bz2
Avoid division by zero in fold_loop_internal_call
My patch to fix profile after folding internal call is missing check for the case profile was already zero before if-conversion. gcc/ChangeLog: PR gcov-profile/110988 * tree-cfg.cc (fold_loop_internal_call): Avoid division by zero.
Diffstat (limited to 'gcc/tree-cfg.cc')
-rw-r--r--gcc/tree-cfg.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index fae80bb..272d5ce 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);
+ }
}
}
}