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

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Actually (int) ((ivtmp.11 - (unsigned long) dst_10) / 4), sorry.
On 64-bit targets this will never be a problem, are you worried about 32-bit
targets where int and pointers are the same width and for a loop with say up to
INT_MAX iterations ivtmp.11 would wrap around?  Then dst[i] would be invalid
too.
So as long as the IVs aren't added there out of the blue sky, with larger steps
than what is really used, it shouldn't be an issue.
Or can say a loop that does:
unsigned int j = x;
for (int i = 0; i < n; i++)
  {
    j += 32;
    use (i, j);
  }
use j as unsigned int IV with step 32 replace the i int IV with step 1?  If
yes, then I'd understand that (int) ((j - x) / 32) might not be correct
expression all the time, e.g. if j == x, then i might be 0, or 0x8000000 etc.,
but (int) ((j - x) / 32) will be 0.

Reply via email to