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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |matz at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Sth wrong with liveness analysis.  There's obvious liveness of IN from BB2:

;;   basic block 2, loop depth 0
;;    pred:       ENTRY
  _30 = (unsigned long) &in;
  ivtmp.30_29 = _30 + 1;
  goto <bb 5>; [100.00%]
;;    succ:       5

to

;;   basic block 7, loop depth 1
;;    pred:       5
  in ={v} {CLOBBER};
  i_10 = i_6 + 1;
  if (i_10 != 5)
    goto <bb 3>; [80.00%]
  else
    goto <bb 8>; [20.00%]
;;    succ:       3
;;                8

but maybe that being at different loop depth somehow confuses the algorithm
in fact having it there seems odd to me but the address-taking in BB2 is
the result of IVOPTs hoisting.  The CLOBBER doesn't effect hoisting
the address but RTL expansion liveness compute splits 'in' into multiple
logical instances at the CLOBBER which _does_ make the addresses effectively
different ...

Reply via email to