This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/10988] New: [m32r-elf] wrong blockmove code with -O3


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]