Loop optimisation

Michael P. Hayes michaelh@ongaonga.chch.cri.nz
Tue Nov 4 19:30:00 GMT 1997


I've noticed that GCC poorly optimises the following loops:

void foo(const float *src, float *dst, int size, int offset)
{
    int i;

    for (i = 0; i < size; i++)
      dst[i + offset] = src[i];
}

where the loop RTL of interest after CSE is

  (set (reg:SI 43) (plus:SI (reg/v:SI 40) (reg/v:SI 42)))
  (set (reg:SI 44) (plus:SI (reg/v:SI 37) (reg:SI 43)))
  (set (mem/s:SF (reg:SI 44)) (reg:SF 45))

where 40 is i, the induction variable pseudo
      42 is offset
      37 is &dst 

Ideally, the redundant address calculations should be hoisted out of
the loop.  Is this within the scope of the current loop optimiser?

Michael.



More information about the Gcc mailing list