https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93264

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
So let's try to address this in cfgloop.c - we're likely facing the situation
of

 header:
...
  if (...) goto latch1;

 latch2:
   goto header;

 latch1: // in cold section
   goto header;

where latch disambiguation via merge_latch_egdes tries to build

  header:
...
  if (...) goto latch1;

 latch2:
   goto latch3;

 latch1: // in cold section
   goto latch3;

 latch3: // somewhere
   goto header;

but somehow we end up redirecting a jump that was formerly crossing
to non-crossing.  Looking at the backtrace it must be entry edges
that are being redirected but the whole setup should be so that
the crossing state of a branch is never changed.

Unfortunately I can't reproduce on todays trunk, will try rewiding backwards
to the reporting time to have a closer look.

Reply via email to