http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50749
--- Comment #8 from Oleg Endo <oleg.e...@t-online.de> 2011-11-28 22:31:44 UTC --- (In reply to comment #7) > The problem is that SH target can't do those simple array accesses > well at QI/HImode because of the lack of displacement addressing > for those modes. In these particular cases, this is true. Even if there was a working QI/HImode displacement addressing, it would most likely result in worse code compared to post-inc / pre-dec addressing opportunities, because of register pressure on R0. Apart from that there is no displacement addressing for FPU loads/stores, which also misses some opportunities: float test_func_5 (float* p, int c) { float r = 0; do { r += *p++; r += *p++; r += *p++; } while (--c); return r; } Compiled with -Os -m4-single: fldi0 fr0 .L11: mov r4,r1 fmov.s @r1+,fr1 dt r5 fadd fr1,fr0 fmov.s @r1,fr1 mov r4,r1 add #8,r1 add #12,r4 fadd fr1,fr0 fmov.s @r1,fr1 bf/s .L11 fadd fr1,fr0 rts nop ..could be: fldi0 fr0 .L11: fmov.s @r4+,fr1 dt r5 fadd fr1,fr0 fmov.s @r4+,fr1 fadd fr1,fr0 fmov.s @r4+,fr1 bf/s .L11 fadd fr1,fr0 rts nop Specifying -fno-tree-forwprop doesn't seem to have any effect on these cases.