cse.c (exp_equiv_p): Special case CONST_DOUBLE.

* cse.c (exp_equiv_p): Special case CONST_DOUBLE.
        * cselib.c (rtx_equal_for_cselib_p): Likewise.
        * jump.c (rtx_renumbered_equal_p): Likewise.
        * loop.c (rtx_equal_for_loop_p): Tidy and special case PC, CC0,
        CONST_INT and CONST_DOUBLE.
        (rtx_equal_for_prefetch_p): Likewise, plus LABEL_REF.
        * reload.c (operands_match_p): Special case CONST_INT and
        CONST_DOUBLE; check mode earlier.

From-SVN: r102548
This commit is contained in:
Richard Henderson 2005-07-28 22:57:44 -07:00 committed by Richard Henderson
parent 13b22d3a86
commit 37cf61167f
6 changed files with 79 additions and 17 deletions

View File

@ -1,3 +1,14 @@
2005-07-28 Richard Henderson <rth@redhat.com>
* cse.c (exp_equiv_p): Special case CONST_DOUBLE.
* cselib.c (rtx_equal_for_cselib_p): Likewise.
* jump.c (rtx_renumbered_equal_p): Likewise.
* loop.c (rtx_equal_for_loop_p): Tidy and special case PC, CC0,
CONST_INT and CONST_DOUBLE.
(rtx_equal_for_prefetch_p): Likewise, plus LABEL_REF.
* reload.c (operands_match_p): Special case CONST_INT and
CONST_DOUBLE; check mode earlier.
2005-07-29 Joseph S. Myers <joseph@codesourcery.com>
PR c/22240

View File

@ -2498,6 +2498,7 @@ exp_equiv_p (rtx x, rtx y, int validate, bool for_gcse)
case PC:
case CC0:
case CONST_INT:
case CONST_DOUBLE:
return x == y;
case LABEL_REF:

View File

@ -462,9 +462,18 @@ rtx_equal_for_cselib_p (rtx x, rtx y)
if (GET_CODE (x) != GET_CODE (y) || GET_MODE (x) != GET_MODE (y))
return 0;
/* This won't be handled correctly by the code below. */
if (GET_CODE (x) == LABEL_REF)
return XEXP (x, 0) == XEXP (y, 0);
/* These won't be handled correctly by the code below. */
switch (GET_CODE (x))
{
case CONST_DOUBLE:
return 0;
case LABEL_REF:
return XEXP (x, 0) == XEXP (y, 0);
default:
break;
}
code = GET_CODE (x);
fmt = GET_RTX_FORMAT (code);

View File

@ -1879,6 +1879,7 @@ rtx_renumbered_equal_p (rtx x, rtx y)
case ADDR_VEC:
case ADDR_DIFF_VEC:
case CONST_INT:
case CONST_DOUBLE:
return 0;
case LABEL_REF:

View File

@ -2057,14 +2057,26 @@ rtx_equal_for_loop_p (rtx x, rtx y, struct loop_movables *movables,
if (GET_MODE (x) != GET_MODE (y))
return 0;
/* These three types of rtx's can be compared nonrecursively. */
if (code == REG)
return (REGNO (x) == REGNO (y) || regs_match_p (x, y, movables));
/* These types of rtx's can be compared nonrecursively. */
switch (code)
{
case PC:
case CC0:
case CONST_INT:
case CONST_DOUBLE:
return 0;
if (code == LABEL_REF)
return XEXP (x, 0) == XEXP (y, 0);
if (code == SYMBOL_REF)
return XSTR (x, 0) == XSTR (y, 0);
case REG:
return (REGNO (x) == REGNO (y) || regs_match_p (x, y, movables));
case LABEL_REF:
return XEXP (x, 0) == XEXP (y, 0);
case SYMBOL_REF:
return XSTR (x, 0) == XSTR (y, 0);
default:
break;
}
/* Compare the elements. If any pair of corresponding elements
fail to match, return 0 for the whole things. */
@ -3984,6 +3996,24 @@ rtx_equal_for_prefetch_p (rtx x, rtx y)
if (code != GET_CODE (y))
return 0;
if (GET_MODE (x) != GET_MODE (y))
return 0;
switch (code)
{
case PC:
case CC0:
case CONST_INT:
case CONST_DOUBLE:
return 0;
case LABEL_REF:
return XEXP (x, 0) == XEXP (y, 0);
default:
break;
}
if (COMMUTATIVE_ARITH_P (x))
{
return ((rtx_equal_for_prefetch_p (XEXP (x, 0), XEXP (y, 0))

View File

@ -2208,20 +2208,30 @@ operands_match_p (rtx x, rtx y)
slow:
/* Now we have disposed of all the cases
in which different rtx codes can match. */
/* Now we have disposed of all the cases in which different rtx codes
can match. */
if (code != GET_CODE (y))
return 0;
if (code == LABEL_REF)
return XEXP (x, 0) == XEXP (y, 0);
if (code == SYMBOL_REF)
return XSTR (x, 0) == XSTR (y, 0);
/* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent. */
if (GET_MODE (x) != GET_MODE (y))
return 0;
switch (code)
{
case CONST_INT:
case CONST_DOUBLE:
return 0;
case LABEL_REF:
return XEXP (x, 0) == XEXP (y, 0);
case SYMBOL_REF:
return XSTR (x, 0) == XSTR (y, 0);
default:
break;
}
/* Compare the elements. If any pair of corresponding elements
fail to match, return 0 for the whole things. */