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

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |segher at gcc dot 
gnu.org

--- Comment #7 from Segher Boessenkool <segher at gcc dot gnu.org> ---
The testcase has undefined behaviour, of course.

We start with these insns, all in the same basic block, in this order:

  B := A|Z    (1)
  A := B      (2)
  D := A      (3)

First propagating (1) into (2) is tried.  This fails, because the IOR makes
this not simple enough to propagate.

Later Z is found to be 0, but it never tries to propagate (1) into (2) again.
If fwprop would try that there would be no problem, and this is a missed
optimisation anyway!

If all propagations would be tried it would result in

  B := A
  A := A
  D := A

but with what we have now we get

  B := A
  A := B
  D := A

oscillating with

  B := A
  A := B
  D := B

Reply via email to