This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/50750] New: SH Target: Pre-decrement addressing used only for first memory access
- From: "oleg dot endo at t-online dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 16 Oct 2011 22:34:34 +0000
- Subject: [Bug target/50750] New: SH Target: Pre-decrement addressing used only for first memory access
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50750
Bug #: 50750
Summary: SH Target: Pre-decrement addressing used only for
first memory access
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: oleg.endo@t-online.de
CC: kkojima@gcc.gnu.org
Target: sh*-*-*
Pre-decrement addressing is generated only for the first
memory access. Any subsequent memory access does not use
pre-decrement addressing.
The following is a reduced example.
The problem exists with any number of memory accesses > 1
and at any optimization level.
int test_func_2_1 (int* p, int c)
{
int r = 0;
do
{
r += *--p;
r += *--p;
r += *--p;
} while (--c);
return r;
}
compiled with -fno-tree-loop-optimize -Os -m4-single -ml:
mov #0,r0
.L11:
mov r4,r1
add #-64,r1
mov.l @(60,r1),r2
dt r5
add #-12,r4
add r2,r0
mov.l @(56,r1),r2
mov.l @(52,r1),r1
add r2,r0
bf/s .L11
add r1,r0
rts
nop
would be better as:
mov #0,r0
.L11:
mov.l @-r4,r1
dt r5
mov.l @-r4,r2
add r1,r0
mov.l @-r4,r3
add r2,r0
bf/s .L11
add r3,r0
rts
nop
Using built-in specs.
COLLECT_GCC=sh-elf-gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/sh-elf/4.7.0/lto-wrapper
Target: sh-elf
Configured with: ../gcc-trunk/configure --target=sh-elf --prefix=/usr/local
--enable-languages=c,c++ --enable-multilib --disable-libssp --disable-nls
--disable-werror --enable-lto --with-newlib --with-gnu-as --with-gnu-ld
--with-system-zlib
Thread model: single
gcc version 4.7.0 20111016 (experimental) (GCC)