Linux MIPS Architecture development
 help / color / mirror / Atom feed
* gcc-2.96-99 optimization bug?
@ 2002-02-08 10:37 Atsushi Nemoto
  2002-02-08 18:30 ` H . J . Lu
  0 siblings, 1 reply; 4+ messages in thread
From: Atsushi Nemoto @ 2002-02-08 10:37 UTC (permalink / raw)
  To: linux-mips

I found gcc 2.96 (gcc-2.96-99.1.mipsel.rpm in H.J.Lu's RedHat 7.1)
outputs wrong code for this short program.

int foo(unsigned long long a, unsigned long long b)
{
	int as, bs;
	as = a >> 63;
	bs = b >> 63;
	if (as != bs)
		return as || !(b << 1);
	return (a == b) || as;
}

int main(int argc, char **argv)
{
	return foo(0, 0xffffffffffffffffull);
}

This program must return 0.  But compiling with -O2 it returns 1 !!

# gcc -O -o foo foo.c;./foo;echo $?
0
# gcc -O2 -o foo foo.c;./foo;echo $?
1

Output wth -O -g are:

00400780 <foo>:
  400780:	3c1c0fc0 	lui	gp,0xfc0
  400784:	279c78b0 	addiu	gp,gp,30896
  400788:	0399e021 	addu	gp,gp,t9
  40078c:	00804021 	move	t0,a0
  400790:	00a04821 	move	t1,a1
  400794:	000917c2 	srl	v0,t1,0x1f
  400798:	00402821 	move	a1,v0
  40079c:	000717c2 	srl	v0,a3,0x1f
  4007a0:	10a2000d 	beq	a1,v0,4007d8 <foo+0x58>
  4007a4:	00001821 	move	v1,zero
  4007a8:	14a00008 	bnez	a1,4007cc <foo+0x4c>
  4007ac:	00004021 	move	t0,zero
  4007b0:	00071840 	sll	v1,a3,0x1
  4007b4:	000627c2 	srl	a0,a2,0x1f
  4007b8:	00641825 	or	v1,v1,a0
  4007bc:	00061040 	sll	v0,a2,0x1
  4007c0:	00621025 	or	v0,v1,v0
  4007c4:	14400002 	bnez	v0,4007d0 <foo+0x50>
  4007c8:	00000000 	nop
  4007cc:	24080001 	li	t0,1
  4007d0:	03e00008 	jr	ra
  4007d4:	01001021 	move	v0,t0
  4007d8:	15060003 	bne	t0,a2,4007e8 <foo+0x68>
  4007dc:	00001021 	move	v0,zero
  4007e0:	11270003 	beq	t1,a3,4007f0 <foo+0x70>
  4007e4:	00000000 	nop
  4007e8:	10a00002 	beqz	a1,4007f4 <foo+0x74>
  4007ec:	00000000 	nop
  4007f0:	24020001 	li	v0,1
  4007f4:	03e00008 	jr	ra
  4007f8:	00000000 	nop

Output with -O2 -g are:

00400780 <foo>:
  400780:	3c1c0fc0 	lui	gp,0xfc0
  400784:	279c78b0 	addiu	gp,gp,30896
  400788:	0399e021 	addu	gp,gp,t9
  40078c:	00805021 	move	t2,a0
  400790:	00c04021 	move	t0,a2
  400794:	00a05821 	move	t3,a1
  400798:	00e04821 	move	t1,a3
  40079c:	000b17c2 	srl	v0,t3,0x1f
  4007a0:	000927c2 	srl	a0,t1,0x1f
  4007a4:	00001821 	move	v1,zero
  4007a8:	1044000a 	beq	v0,a0,4007d4 <foo+0x54>
  4007ac:	00002821 	move	a1,zero
  4007b0:	14400006 	bnez	v0,4007cc <foo+0x4c>
  4007b4:	24050001 	li	a1,1
  4007b8:	00091840 	sll	v1,t1,0x1
  4007bc:	000827c2 	srl	a0,t0,0x1f
  4007c0:	00641825 	or	v1,v1,a0
  4007c4:	00081040 	sll	v0,t0,0x1
  4007c8:	00621025 	or	v0,v1,v0
  4007cc:	03e00008 	jr	ra
  4007d0:	00a01021 	move	v0,a1
  4007d4:	15480003 	bne	t2,t0,4007e4 <foo+0x64>
  4007d8:	00001821 	move	v1,zero
  4007dc:	11690003 	beq	t3,t1,4007ec <foo+0x6c>
  4007e0:	00000000 	nop
  4007e4:	10400002 	beqz	v0,4007f0 <foo+0x70>
  4007e8:	00000000 	nop
  4007ec:	24030001 	li	v1,1
  4007f0:	03e00008 	jr	ra
  4007f4:	00601021 	move	v0,v1


It seems one 'bnez' in good code (at 4007c4) was lost in bad code.

Is this a know problem?  If so, is there any patches available?

Thank you.
---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: gcc-2.96-99 optimization bug?
@ 2002-02-08 10:53 Zhang Fuxin
  0 siblings, 0 replies; 4+ messages in thread
From: Zhang Fuxin @ 2002-02-08 10:53 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips@oss.sgi.com

hi,
    it seems fixed in latest gcc (3.1). gcc 2.96 does produce wrong code
 for -O2, i posted another example one or two days ago.


在 2002-02-08 19:37:00 you wrote:
>I found gcc 2.96 (gcc-2.96-99.1.mipsel.rpm in H.J.Lu's RedHat 7.1)
>outputs wrong code for this short program.
>
>int foo(unsigned long long a, unsigned long long b)
>{
>	int as, bs;
>	as = a >> 63;
>	bs = b >> 63;
>	if (as != bs)
>		return as || !(b << 1);
>	return (a == b) || as;
>}
>
>int main(int argc, char **argv)
>{
>	return foo(0, 0xffffffffffffffffull);
>}
>
>This program must return 0.  But compiling with -O2 it returns 1 !!
>
># gcc -O -o foo foo.c;./foo;echo $?
>0
># gcc -O2 -o foo foo.c;./foo;echo $?
>1
>
>Output wth -O -g are:
>
>00400780 <foo>:
>  400780:	3c1c0fc0 	lui	gp,0xfc0
>  400784:	279c78b0 	addiu	gp,gp,30896
>  400788:	0399e021 	addu	gp,gp,t9
>  40078c:	00804021 	move	t0,a0
>  400790:	00a04821 	move	t1,a1
>  400794:	000917c2 	srl	v0,t1,0x1f
>  400798:	00402821 	move	a1,v0
>  40079c:	000717c2 	srl	v0,a3,0x1f
>  4007a0:	10a2000d 	beq	a1,v0,4007d8 <foo+0x58>
>  4007a4:	00001821 	move	v1,zero
>  4007a8:	14a00008 	bnez	a1,4007cc <foo+0x4c>
>  4007ac:	00004021 	move	t0,zero
>  4007b0:	00071840 	sll	v1,a3,0x1
>  4007b4:	000627c2 	srl	a0,a2,0x1f
>  4007b8:	00641825 	or	v1,v1,a0
>  4007bc:	00061040 	sll	v0,a2,0x1
>  4007c0:	00621025 	or	v0,v1,v0
>  4007c4:	14400002 	bnez	v0,4007d0 <foo+0x50>
>  4007c8:	00000000 	nop
>  4007cc:	24080001 	li	t0,1
>  4007d0:	03e00008 	jr	ra
>  4007d4:	01001021 	move	v0,t0
>  4007d8:	15060003 	bne	t0,a2,4007e8 <foo+0x68>
>  4007dc:	00001021 	move	v0,zero
>  4007e0:	11270003 	beq	t1,a3,4007f0 <foo+0x70>
>  4007e4:	00000000 	nop
>  4007e8:	10a00002 	beqz	a1,4007f4 <foo+0x74>
>  4007ec:	00000000 	nop
>  4007f0:	24020001 	li	v0,1
>  4007f4:	03e00008 	jr	ra
>  4007f8:	00000000 	nop
>
>Output with -O2 -g are:
>
>00400780 <foo>:
>  400780:	3c1c0fc0 	lui	gp,0xfc0
>  400784:	279c78b0 	addiu	gp,gp,30896
>  400788:	0399e021 	addu	gp,gp,t9
>  40078c:	00805021 	move	t2,a0
>  400790:	00c04021 	move	t0,a2
>  400794:	00a05821 	move	t3,a1
>  400798:	00e04821 	move	t1,a3
>  40079c:	000b17c2 	srl	v0,t3,0x1f
>  4007a0:	000927c2 	srl	a0,t1,0x1f
>  4007a4:	00001821 	move	v1,zero
>  4007a8:	1044000a 	beq	v0,a0,4007d4 <foo+0x54>
>  4007ac:	00002821 	move	a1,zero
>  4007b0:	14400006 	bnez	v0,4007cc <foo+0x4c>
>  4007b4:	24050001 	li	a1,1
>  4007b8:	00091840 	sll	v1,t1,0x1
>  4007bc:	000827c2 	srl	a0,t0,0x1f
>  4007c0:	00641825 	or	v1,v1,a0
>  4007c4:	00081040 	sll	v0,t0,0x1
>  4007c8:	00621025 	or	v0,v1,v0
>  4007cc:	03e00008 	jr	ra
>  4007d0:	00a01021 	move	v0,a1
>  4007d4:	15480003 	bne	t2,t0,4007e4 <foo+0x64>
>  4007d8:	00001821 	move	v1,zero
>  4007dc:	11690003 	beq	t3,t1,4007ec <foo+0x6c>
>  4007e0:	00000000 	nop
>  4007e4:	10400002 	beqz	v0,4007f0 <foo+0x70>
>  4007e8:	00000000 	nop
>  4007ec:	24030001 	li	v1,1
>  4007f0:	03e00008 	jr	ra
>  4007f4:	00601021 	move	v0,v1
>
>
>It seems one 'bnez' in good code (at 4007c4) was lost in bad code.
>
>Is this a know problem?  If so, is there any patches available?
>
>Thank you.
>---
>Atsushi Nemoto

Regards
            Zhang Fuxin
            fxzhang@ict.ac.cn

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: gcc-2.96-99 optimization bug?
  2002-02-08 10:37 gcc-2.96-99 optimization bug? Atsushi Nemoto
@ 2002-02-08 18:30 ` H . J . Lu
  2002-02-12  2:03   ` Atsushi Nemoto
  0 siblings, 1 reply; 4+ messages in thread
From: H . J . Lu @ 2002-02-08 18:30 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips

On Fri, Feb 08, 2002 at 07:37:31PM +0900, Atsushi Nemoto wrote:
> I found gcc 2.96 (gcc-2.96-99.1.mipsel.rpm in H.J.Lu's RedHat 7.1)
> outputs wrong code for this short program.
> 
> It seems one 'bnez' in good code (at 4007c4) was lost in bad code.
> 
> Is this a know problem?  If so, is there any patches available?
> 

gcc 3.1 seems fine. No one is working on gcc 2.96. I am working on
a new Linuxx/mips which will use gcc 3.1.


H.J.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: gcc-2.96-99 optimization bug?
  2002-02-08 18:30 ` H . J . Lu
@ 2002-02-12  2:03   ` Atsushi Nemoto
  0 siblings, 0 replies; 4+ messages in thread
From: Atsushi Nemoto @ 2002-02-12  2:03 UTC (permalink / raw)
  To: hjl; +Cc: linux-mips

>>>>> On Fri, 8 Feb 2002 10:30:47 -0800, "H . J . Lu" <hjl@lucon.org> said:
hjl> gcc 3.1 seems fine. No one is working on gcc 2.96. I am working
hjl> on a new Linuxx/mips which will use gcc 3.1.

Thank you.  I will wait for your new package and try it.

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-02-12  3:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-02-08 10:37 gcc-2.96-99 optimization bug? Atsushi Nemoto
2002-02-08 18:30 ` H . J . Lu
2002-02-12  2:03   ` Atsushi Nemoto
  -- strict thread matches above, loose matches on Subject: below --
2002-02-08 10:53 Zhang Fuxin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox