diff options
author | Jan Hubicka <jh@suse.cz> | 2023-08-14 17:55:33 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2023-08-14 17:55:33 +0200 |
commit | 882af290c137dfab5d99b88e6dbecc5e75d85a0b (patch) | |
tree | 72682d2b9f8422b9706deddfe0064e1db03f18ae /gcc/tree-cfg.cc | |
parent | 7879f589af911ea6a910d08919014b0b2df1b4b1 (diff) | |
download | gcc-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.cc | 13 |
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); + } } } } |