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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu.org

--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so the issue is that we are doing a jump threading that violates SSA form
since it bypasses the definition used by the merge block.  There's likely
validation that this cannot happen but since we're forward-threading it's
probably happening too early and the SSA definition is only apperaring when
visiting a block we thread through where we change

   if (nd_5 >= 128)

to

   _46 = (singed char) nd_6;
   if (_46 < 0)

and the merge had

   L4:
    nd.7_11 = (signed char) nd_5;

where we now realize the CSE opportunity to _46.

The r9-6384-g1a438d160e1dc845 change makes us enter the new _46 = (signed char)
nd_6 expression into the hashtable (it was skipped before).

Somebody more familiar with the (old) threading code needs to debug this
further or provide hints as to where the designed point is to avoid this issue.
 Jeff?

Reply via email to