http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54065
Bug #: 54065 Summary: [SH] Prefer @(R0,Rn) addressing for floating-point load/store Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: olege...@gcc.gnu.org Target: sh*-*-* The following function float test00 (float* x) { return x[10] + x[1] + x[20] + x[30]; } compiled with e.g. '-O2 -m4-single -ml' results in: mov r4,r2 mov r4,r1 add #40,r2 add #4,r1 fmov.s @r2,fr0 fmov.s @r1,fr1 add #76,r1 add #120,r4 fadd fr1,fr0 fmov.s @r1,fr1 fadd fr1,fr0 fmov.s @r4,fr1 rts fadd fr1,fr0 which would be better as: mov #40,r0 fmov.s @(r0,r2),fr0 mov #4,r0 fmov.s @(r0,r1),fr1 mov #80,r0 fadd fr1,fr0 fmov.s @(r0,r1),fr1 mov #120,r0 fadd fr1,fr0 fmov.s @(r0,r4),fr1 rts fadd fr1,fr0 In sh.md (around line 11724) there are some old peephole patterns that were supposed to handle this case, I guess. However, they seem to be defunct.