This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug bootstrap/66252] [6 regression] bootstrap comparison failures on sparc-linux
- From: "ebotcazou at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 08 Jun 2015 15:44:06 +0000
- Subject: [Bug bootstrap/66252] [6 regression] bootstrap comparison failures on sparc-linux
- Auto-submitted: auto-generated
- References: <bug-66252-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66252
--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
cse.c:fold_rtx is miscompiled by the stage2 compiler, more precisely in:
if (const_arg1 != 0 && CONST_INT_P (const_arg1)
&& INTVAL (const_arg1) < 0
/* This used to test
-INTVAL (const_arg1) >= 0
But The Sun V5.0 compilers mis-compiled that test. So
instead we test for the problematic value in a more direct
manner and hope the Sun compilers get it correct. */
&& INTVAL (const_arg1) !=
((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1))
&& REG_P (folded_arg1))
{
rtx new_const = GEN_INT (-INTVAL (const_arg1));
the -INTVAL is miscompiled:
=> 0x00a94d58 <+4884>: subcc %g0, %o3, %o2
0x00a94d5c <+4888>: clr %o0
0x00a94d60 <+4892>: call 0x35044c <gen_rtx_CONST_INT(machine_mode, long
long)>
0x00a94d64 <+4896>: subc %g0, %o2, %o1
%o2 is wrongly clobbered by the first subtraction.