public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/tnfchris/heads/gcc-14-early-break)] Fix scale_loop_frequencies segfault on multiple-exits
@ 2023-06-28 13:32 Tamar Christina
0 siblings, 0 replies; only message in thread
From: Tamar Christina @ 2023-06-28 13:32 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:c3c010cf7ac9e9c3d600466987c4dd98f253ffd4
commit c3c010cf7ac9e9c3d600466987c4dd98f253ffd4
Author: Tamar Christina <tamar.christina@arm.com>
Date: Wed Jun 28 13:41:38 2023 +0100
Fix scale_loop_frequencies segfault on multiple-exits
There's an existing bug in loop frequency scaling where the if statement checks
to see if there's a single exit, and records an dump file note but then
continues.
It then tries to access the null pointer, which of course fails.
For multiple loop exists it's not really clear how to scale the exit
probablities as it's really unknown which exit is most probably.
For that reason I ignore the exit edges during scaling but still adjust the
loop body.
gcc/ChangeLog:
* cfgloopmanip.cc (scale_loop_frequencies): Fix typo.
(scale_loop_profile): Don't access null pointer.
Diff:
---
gcc/cfgloopmanip.cc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gcc/cfgloopmanip.cc b/gcc/cfgloopmanip.cc
index 6e09dcbb0b1..b10ef3d2be8 100644
--- a/gcc/cfgloopmanip.cc
+++ b/gcc/cfgloopmanip.cc
@@ -501,7 +501,7 @@ scale_loop_frequencies (class loop *loop, profile_probability p)
/* Scale profile in LOOP by P.
If ITERATION_BOUND is non-zero, scale even further if loop is predicted
to iterate too many times.
- Before caling this function, preheader block profile should be already
+ Before calling this function, preheader block profile should be already
scaled to final count. This is necessary because loop iterations are
determined by comparing header edge count to latch ege count and thus
they need to be scaled synchronously. */
@@ -597,14 +597,14 @@ scale_loop_profile (class loop *loop, profile_probability p,
/* If latch exists, change its count, since we changed
probability of exit. Theoretically we should update everything from
source of exit edge to latch, but for vectorizer this is enough. */
- if (loop->latch && loop->latch != e->src)
+ if (e && loop->latch && loop->latch != e->src)
loop->latch->count += count_delta;
/* Scale the probabilities. */
scale_loop_frequencies (loop, p);
/* Change latch's count back. */
- if (loop->latch && loop->latch != e->src)
+ if (e && loop->latch && loop->latch != e->src)
loop->latch->count -= count_delta;
if (dump_file && (dump_flags & TDF_DETAILS))
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-06-28 13:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-28 13:32 [gcc(refs/users/tnfchris/heads/gcc-14-early-break)] Fix scale_loop_frequencies segfault on multiple-exits Tamar Christina
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).