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

Marc Glisse <glisse at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-12-19
          Component|middle-end                  |tree-optimization
     Ever confirmed|0                           |1
           Severity|normal                      |enhancement

--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> ---
Not sure what the best angle is here.

_18 = (unsigned long) &MEM[(void *)&foo + 9B];
_16 = _18 + 1;

looks like it would be better as:

_19 = (unsigned long) &foo;
_16 = _19 + 10;

(I guess we don't want to produce &MEM[(void *)&foo + 10B])

But that might not be true anymore if _18 had several uses.

Reassoc could also play a role, either to cancel the two +1, or to put the two
converted addresses together.

I guess extra match.pd patterns might be doable as well, but I am scared of the
number of variants that might appear.

Reply via email to