simplify-rtx.c (simplify_replace_rtx): Convert constant comparisons to MODE_FLOAT constants if...

* simplify-rtx.c (simplify_replace_rtx): Convert constant comparisons
	to MODE_FLOAT constants if FLOAT_STORE_FLAG_VALUE is defined.
	(simplify_rtx): Likewise.  Simplify (lo_sum (high X) X) as X.

From-SVN: r69475
This commit is contained in:
Roger Sayle 2003-07-16 19:34:50 +00:00 committed by Roger Sayle
parent 264d65c1b5
commit d41ba56fc4
2 changed files with 52 additions and 12 deletions

View File

@ -1,3 +1,9 @@
2003-07-16 Roger Sayle <roger@eyesopen.com>
* simplify-rtx.c (simplify_replace_rtx): Convert constant comparisons
to MODE_FLOAT constants if FLOAT_STORE_FLAG_VALUE is defined.
(simplify_rtx): Likewise. Simplify (lo_sum (high X) X) as X.
2003-07-16 Andrew Pinski <pinskia@physics.uc.edu>
* doc/install.texi (--without-headers): New.

View File

@ -269,15 +269,24 @@ simplify_replace_rtx (rtx x, rtx old, rtx new)
: GET_MODE (XEXP (x, 1)));
rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new);
rtx op1 = simplify_replace_rtx (XEXP (x, 1), old, new);
return
simplify_gen_relational (code, mode,
(op_mode != VOIDmode
? op_mode
: GET_MODE (op0) != VOIDmode
? GET_MODE (op0)
: GET_MODE (op1)),
op0, op1);
rtx temp = simplify_gen_relational (code, mode,
(op_mode != VOIDmode
? op_mode
: GET_MODE (op0) != VOIDmode
? GET_MODE (op0)
: GET_MODE (op1)),
op0, op1);
#ifdef FLOAT_STORE_FLAG_VALUE
if (GET_MODE_CLASS (mode) == MODE_FLOAT)
{
if (temp == const0_rtx)
temp = CONST0_RTX (mode);
else if (temp == const_true_rtx)
temp = CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE (mode),
mode);
}
#endif
return temp;
}
case '3':
@ -3030,6 +3039,7 @@ simplify_rtx (rtx x)
{
enum rtx_code code = GET_CODE (x);
enum machine_mode mode = GET_MODE (x);
rtx temp;
switch (GET_RTX_CLASS (code))
{
@ -3058,12 +3068,24 @@ simplify_rtx (rtx x)
XEXP (x, 2));
case '<':
return simplify_relational_operation (code,
temp = simplify_relational_operation (code,
((GET_MODE (XEXP (x, 0))
!= VOIDmode)
? GET_MODE (XEXP (x, 0))
: GET_MODE (XEXP (x, 1))),
XEXP (x, 0), XEXP (x, 1));
#ifdef FLOAT_STORE_FLAG_VALUE
if (temp != 0 && GET_MODE_CLASS (mode) == MODE_FLOAT)
{
if (temp == const0_rtx)
temp = CONST0_RTX (mode);
else
temp = CONST_DOUBLE_FROM_REAL_VALUE (FLOAT_STORE_FLAG_VALUE (mode),
mode);
}
#endif
return temp;
case 'x':
if (code == SUBREG)
return simplify_gen_subreg (mode, SUBREG_REG (x),
@ -3074,8 +3096,20 @@ simplify_rtx (rtx x)
if (CONSTANT_P (XEXP (x, 0)))
return const1_rtx;
}
return NULL;
break;
case 'o':
if (code == LO_SUM)
{
/* Convert (lo_sum (high FOO) FOO) to FOO. */
if (GET_CODE (XEXP (x, 0)) == HIGH
&& rtx_equal_p (XEXP (XEXP (x, 0), 0), XEXP (x, 1)))
return XEXP (x, 1);
}
break;
default:
return NULL;
break;
}
return NULL;
}