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