From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael P. Hayes" To: egcs@cygnus.com Subject: Loop optimisation Date: Tue, 04 Nov 1997 19:30:00 -0000 Message-id: <199711050335.QAA19282@ongaonga.chch.cri.nz> X-SW-Source: 1997-11/msg00167.html 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.