re PR rtl-optimization/18942 (Do loop is not as optimized as 3.3.2)
PR rtl-optimization/18942 * simplify-rtx.c (simplify_relational_operation_1): Simplify x + cst1 == cst2 to x == cst2 - cst1. Made static. From-SVN: r92429
This commit is contained in:
parent
b482789cca
commit
bc4ad38cc7
|
@ -1,3 +1,9 @@
|
|||
2004-12-20 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR rtl-optimization/18942
|
||||
* simplify-rtx.c (simplify_relational_operation_1): Simplify
|
||||
x + cst1 == cst2 to x == cst2 - cst1. Made static.
|
||||
|
||||
2004-12-20 Matt Austern <austern@apple.com>
|
||||
|
||||
PR c++/19044
|
||||
|
|
|
@ -2773,10 +2773,13 @@ simplify_relational_operation (enum rtx_code code, enum machine_mode mode,
|
|||
|
||||
MODE is the mode of the result, while CMP_MODE specifies in which
|
||||
mode the comparison is done in, so it is the mode of the operands. */
|
||||
rtx
|
||||
|
||||
static rtx
|
||||
simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
|
||||
enum machine_mode cmp_mode, rtx op0, rtx op1)
|
||||
{
|
||||
enum rtx_code op0code = GET_CODE (op0);
|
||||
|
||||
if (GET_CODE (op1) == CONST_INT)
|
||||
{
|
||||
if (INTVAL (op1) == 0 && COMPARISON_P (op0))
|
||||
|
@ -2800,6 +2803,20 @@ simplify_relational_operation_1 (enum rtx_code code, enum machine_mode mode,
|
|||
}
|
||||
}
|
||||
|
||||
/* (eq/ne (plus x cst1) cst2) simplifies to (eq/ne x (cst2 - cst1)) */
|
||||
if ((code == EQ || code == NE)
|
||||
&& (op0code == PLUS || op0code == MINUS)
|
||||
&& CONSTANT_P (op1)
|
||||
&& CONSTANT_P (XEXP (op0, 1)))
|
||||
{
|
||||
rtx x = XEXP (op0, 0);
|
||||
rtx c = XEXP (op0, 1);
|
||||
|
||||
c = simplify_gen_binary (op0code == PLUS ? MINUS : PLUS,
|
||||
cmp_mode, op1, c);
|
||||
return simplify_gen_relational (code, mode, cmp_mode, x, c);
|
||||
}
|
||||
|
||||
return NULL_RTX;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue