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

--- Comment #27 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This patch breaks ILP32 with stack pointers.
For this function:
void f(int *a, int b, long long d) __attribute__((noinline,noclone));
void f(int *a, int b, long long d)
{
   if((0x6ffffeff - b) < 11)
     a[(0x6ffffeff - b) +34+0+16+3+12] = d;
}

If a is 0xfffefe90 we get an invalid overflow.  We have the following RTL to
begin with:
(plus:SI (plus:SI (mult:SI (reg/v:SI 80 [ b ])
            (const_int -4 [0xfffffffffffffffc]))
        (subreg/s/u:SI (reg/v/f:DI 79 [ a ]) 0))
    (const_int -1073742592 [0xffffffffbffffd00]))

And we decide to put the constant in DImode rather than SImode.

Reply via email to