This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/10988] New: [m32r-elf] wrong blockmove code with -O3
- From: "inaoka dot kazuhiro at renesas dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 27 May 2003 03:17:30 -0000
- Subject: [Bug target/10988] New: [m32r-elf] wrong blockmove code with -O3
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=10988
Summary: [m32r-elf] wrong blockmove code with -O3
Product: gcc
Version: 3.3
Status: UNCONFIRMED
Severity: critical
Priority: P2
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: inaoka.kazuhiro@renesas.com
CC: gcc-bugs@gcc.gnu.org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: m32r-elf
Executing on host: /home4/inaoka/work/work-org_src/build.gcc-3.3/gcc/xgcc -
B/home4/inaoka/work/work-org_src/build.gcc-3.3/gcc/ /home4/inaoka/work/work-
org_src/gcc-3.3/gcc/testsuite/gcc.c-torture/execute/931004-11.c testglue.o -
w -O3 -fomit-frame-pointer -Wl,-wrap,exit -Wl,-wrap,main -Wl,-
wrap,abort -lm -o /home4/inaoka/work/work-org_src/build.gcc-
3.3/gcc/testsuite/931004-11.x3 (timeout = 300)
PASS: gcc.c-torture/execute/931004-11.c compilation, -O3 -fomit-frame-pointer
*** EXIT code 4242
FAIL: gcc.c-torture/execute/931004-11.c execution, -O3 -fomit-frame-pointer
Executing on host: /home4/inaoka/work/work-org_src/build.gcc-3.3/gcc/xgcc -
B/home4/inaoka/work/work-org_src/build.gcc-3.3/gcc/ /home4/inaoka/work/work-
org_src/gcc-3.3/gcc/testsuite/gcc.c-torture/execute/931004-11.c testglue.o -
w -O3 -g -Wl,-wrap,exit -Wl,-wrap,main -Wl,-wrap,abort -lm -
o /home4/inaoka/work/work-org_src/build.gcc-3.3/gcc/testsuite/931004-11.x4
(timeout = 300)
PASS: gcc.c-torture/execute/931004-11.c compilation, -O3 -g
*** EXIT code 4242
FAIL: gcc.c-torture/execute/931004-11.c execution, -O3 -g
The following is a testcase.
<blockmove.c>
struct tiny
{
char c;
char d;
char e;
};
inline f (int n, struct tiny x, struct tiny y)
{
if (x.c != 10)
abort();
if (x.d != 20)
abort();
if (x.e != 30)
abort();
}
main ()
{
struct tiny x[2];
x[0].c = 10;
x[1].c = 11;
x[0].d = 20;
x[1].d = 21;
x[0].e = 30;
x[1].e = 31;
f (3, x[0], x[1]);
exit(sizeof(struct tiny));
}
Command Line: m32r-elf-gcc -S -O3 blockmove.c
<blockmove.s>
Assemble source output:
.section .text
.balign 4
.global main
.type main, @function
main:
; PROLOGUE, vars= 16, regs= 1, args= 0, extra= 0
push lr
ldi r1,#31
addi sp,#-16
ldi r4,#20
stb r1,@(5,sp) ; x[1].e = 31
stb r4,@(1,sp) ; x[0].d = 20
add3 r2,sp,#8
ldi r5,#21
ldi r6,#11
ldi r3,#30
stb r6,@(3,sp) ; x[1].c = 11
stb r5,@(4,sp) ; x[1].d = 21
stb r3,@(2,sp) ; x[0].e = 30
ldi r0,#10
mv r1,sp ; R1 == &x[0] *** NG ***
stb r0,@(sp) ; x[0].c = 10
ld r5, @r1
sra3 r4, r5, #16 ; r4 = x[0].c x[0].d
sth r4, @(0,r2)
srai r5, #8
stb r5, @(2,r2) ; r5 = x[0].e
add3 r0,sp,#12
ldi r2,#3 ; 0x3
bl memcpy ; R1 (wrong address)
ldb r0,@(8,sp)
addi r0,#-10
bnez r0,.L6
ldb r7,@(9,sp)
addi r7,#-20
bnez r7,.L6
ldb lr,@(10,sp)
addi lr,#-30
beqz lr,.L5
.L6:
bl abort
.L5:
ldi r0,#3 ; 0x3
bl exit
; EPILOGUE
addi sp,#16
pop lr
jmp lr
.size main, .-main
.balign 4
.global f
.type f, @function
f:
; PROLOGUE, vars= 8, regs= 1, args= 0, extra= 0
push lr
slli r1,#8
addi sp,#-8
slli r2,#8
st r2,@(4,sp)
st r1,@(sp)
ldb r1,@(sp)
addi r1,#-10
bnez r1,.L11
ldb r1,@(1,sp)
addi r1,#-20
bnez r1,.L11
ldb r2,@(2,sp)
addi r2,#-30
beqz r2,.L10
.L11:
bl abort
.L10:
; EPILOGUE
addi sp,#8
pop lr
jmp lr
.size f, .-f
.ident "GCC: (GNU) 3.3"
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.