mirror of git://gcc.gnu.org/git/gcc.git
re PR middle-end/30311 (revision 120211 failed to compile perlbench)
gcc: PR middle-end/30311 * caller-save.c (add_stored_regs): Only handle SUBREGs if inner REG is a hard register. Do not modify REG before calling subreg_nregs. * rtlanal.c (subreg_get_info): Don't assert size of XMODE is a multiple of the size of YMODE for certain lowpart cases. gcc/testsuite: * gcc.c-torture/compile/pr30311.c: New test. From-SVN: r120329
This commit is contained in:
parent
27c293ef97
commit
a446b4e815
|
|
@ -1,3 +1,12 @@
|
||||||
|
2007-01-02 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
PR middle-end/30311
|
||||||
|
* caller-save.c (add_stored_regs): Only handle SUBREGs if inner
|
||||||
|
REG is a hard register. Do not modify REG before calling
|
||||||
|
subreg_nregs.
|
||||||
|
* rtlanal.c (subreg_get_info): Don't assert size of XMODE is a
|
||||||
|
multiple of the size of YMODE for certain lowpart cases.
|
||||||
|
|
||||||
2007-01-01 Andrew Pinski <pinskia@gmail.com>
|
2007-01-01 Andrew Pinski <pinskia@gmail.com>
|
||||||
|
|
||||||
PR middle-end/30253
|
PR middle-end/30253
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* Save and restore call-clobbered registers which are live across a call.
|
/* Save and restore call-clobbered registers which are live across a call.
|
||||||
Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998,
|
Copyright (C) 1989, 1992, 1994, 1995, 1997, 1998, 1999, 2000,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
|
|
||||||
|
|
@ -537,14 +537,15 @@ add_stored_regs (rtx reg, rtx setter, void *data)
|
||||||
if (GET_CODE (setter) == CLOBBER)
|
if (GET_CODE (setter) == CLOBBER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
|
if (GET_CODE (reg) == SUBREG
|
||||||
|
&& REG_P (SUBREG_REG (reg))
|
||||||
|
&& REGNO (SUBREG_REG (reg)) < FIRST_PSEUDO_REGISTER)
|
||||||
{
|
{
|
||||||
offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)),
|
offset = subreg_regno_offset (REGNO (SUBREG_REG (reg)),
|
||||||
GET_MODE (SUBREG_REG (reg)),
|
GET_MODE (SUBREG_REG (reg)),
|
||||||
SUBREG_BYTE (reg),
|
SUBREG_BYTE (reg),
|
||||||
GET_MODE (reg));
|
GET_MODE (reg));
|
||||||
reg = SUBREG_REG (reg);
|
regno = REGNO (SUBREG_REG (reg)) + offset;
|
||||||
regno = REGNO (reg) + offset;
|
|
||||||
endregno = regno + subreg_nregs (reg);
|
endregno = regno + subreg_nregs (reg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* Analyze RTL for GNU compiler.
|
/* Analyze RTL for GNU compiler.
|
||||||
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
|
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GCC.
|
This file is part of GCC.
|
||||||
|
|
@ -3057,6 +3057,13 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode,
|
||||||
{
|
{
|
||||||
info->representable_p = true;
|
info->representable_p = true;
|
||||||
rknown = true;
|
rknown = true;
|
||||||
|
|
||||||
|
if (offset == 0 || nregs_xmode == nregs_ymode)
|
||||||
|
{
|
||||||
|
info->offset = 0;
|
||||||
|
info->nregs = nregs_ymode;
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This should always pass, otherwise we don't know how to verify
|
/* This should always pass, otherwise we don't know how to verify
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2007-01-02 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
PR middle-end/30311
|
||||||
|
* gcc.c-torture/compile/pr30311.c: New test.
|
||||||
|
|
||||||
2007-01-01 Andrew Pinski <pinskia@gmail.com>
|
2007-01-01 Andrew Pinski <pinskia@gmail.com>
|
||||||
|
|
||||||
PR middle-end/30253
|
PR middle-end/30253
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
/* ICE in subreg_get_info: bug 30311. */
|
||||||
|
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
|
||||||
|
inline double bar(double x)
|
||||||
|
{
|
||||||
|
long double d;
|
||||||
|
__asm__ ("" : "=t" (d) : "0" (x));
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
double foo(double x)
|
||||||
|
{
|
||||||
|
if (x)
|
||||||
|
return bar(x);
|
||||||
|
else
|
||||||
|
return bar(x);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue