re PR rtl-optimization/11700 ([M68K] ICE in subreg_hard_regno)
PR optimization/11700. * simplify-rtx.c (simplify_subreg): Check that the subreg offset of a hard register is representable before trying to simplify it using subreg_hard_regno. * gcc.c-torture/compile/20030903-1.c: New test case. From-SVN: r71046
This commit is contained in:
parent
2a3ef884df
commit
bcfb807527
|
@ -1,3 +1,10 @@
|
|||
2003-09-03 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR optimization/11700.
|
||||
* simplify-rtx.c (simplify_subreg): Check that the subreg offset
|
||||
of a hard register is representable before trying to simplify it
|
||||
using subreg_hard_regno.
|
||||
|
||||
2003-09-04 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
|
||||
|
||||
* configure.in (gcc_cv_ld_hidden): Disable unless using GNU ld.
|
||||
|
|
|
@ -3017,10 +3017,12 @@ simplify_subreg (enum machine_mode outermode, rtx op,
|
|||
#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
|
||||
&& REGNO (op) != ARG_POINTER_REGNUM
|
||||
#endif
|
||||
&& REGNO (op) != STACK_POINTER_REGNUM)
|
||||
&& REGNO (op) != STACK_POINTER_REGNUM
|
||||
&& subreg_offset_representable_p (REGNO (op), innermode,
|
||||
byte, outermode))
|
||||
{
|
||||
int final_regno = subreg_hard_regno (gen_rtx_SUBREG (outermode, op, byte),
|
||||
0);
|
||||
rtx tem = gen_rtx_SUBREG (outermode, op, byte);
|
||||
int final_regno = subreg_hard_regno (tem, 0);
|
||||
|
||||
/* ??? We do allow it if the current REG is not valid for
|
||||
its mode. This is a kludge to work around how float/complex
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2003-09-03 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
PR optimization/11700.
|
||||
* gcc.c-torture/compile/20030903-1.c: New test case.
|
||||
|
||||
2003-09-03 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/12053
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/* Derived from PR optimization/11700. */
|
||||
/* The compiler used to ICE during reload for m68k targets. */
|
||||
|
||||
void check_complex (__complex__ double, __complex__ double,
|
||||
__complex__ double, __complex__ int);
|
||||
void check_float (double, double, double, int);
|
||||
extern double _Complex conj (double _Complex);
|
||||
extern double carg (double _Complex __z);
|
||||
|
||||
static double minus_zero;
|
||||
|
||||
void
|
||||
conj_test (void)
|
||||
{
|
||||
check_complex (conj (({ __complex__ double __retval;
|
||||
__real__ __retval = (0.0);
|
||||
__imag__ __retval = (0.0);
|
||||
__retval; })),
|
||||
({ __complex__ double __retval;
|
||||
__real__ __retval = (0.0);
|
||||
__imag__ __retval = (minus_zero);
|
||||
__retval; }), 0, 0);
|
||||
}
|
||||
|
||||
void
|
||||
carg_test (void)
|
||||
{
|
||||
check_float (carg (({ __complex__ double __retval;
|
||||
__real__ __retval = (2.0);
|
||||
__imag__ __retval = (0);
|
||||
__retval; })), 0, 0, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue