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

--- Comment #5 from Drea Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Drea Pinski from comment #4)
> bisect to r16-5324-gbeba09b5c5a2f4 .

So it is the change in phi_analyzer::process_phi:
From:
  if (phi_count < 2)
    return;
to:
  if (phi_count < 1)
    return;

But phi_count is initialized to 1.
So phi_count is never `< 1`.

But that is not the issue.

The issue is we have:
  # set_6 = PHI <insn_9(D)(2), elt_10(D)(3)>
  _5 = set_6 == 0B;
  _11 = (int) _5;

  <bb 5> [local count: 1073741824]:
  # _7 = PHI <0(3), _11(4)>

we call `query.range_on_edge` on _11 here which means caching the fact that
set_6 is varying.

I wonder if we can process these in a better order.

Like for an example only process phis for loop headers.
This won't fix the issue overall though. Because you could have a similar
pattern feeding into a phi for the loop header.

Anyways (maybe) over to Andrew for now.

Is there a way to clear the ranger cache after phi_analyzer?

Reply via email to