diff options
author | bergner <bergner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-23 16:43:24 +0000 |
---|---|---|
committer | bergner <bergner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-23 16:43:24 +0000 |
commit | 1f3b83af524f926a42b312b954966ca349d9b69f (patch) | |
tree | ff49113424954fc128f22d29310fdf6c0c984bbc /gcc/rtlanal.c | |
parent | 94d11afb008980a6dd1ecaace046320c2d889ad5 (diff) | |
download | gcc-1f3b83af524f926a42b312b954966ca349d9b69f.tar.gz |
PR middle-end/PR28690
* optabs.c (expand_binop): (emit_cmp_and_jump_insns): Allow EQ compares.
* rtlanal.c (commutative_operand_precedence): Prefer both REG_POINTER
and MEM_POINTER operands over REG and MEM operands.
(swap_commutative_operands_p): Change return value to bool.
* rtl.h: Update the corresponding prototype.
* tree-ssa-address.c (gen_addr_rtx): Use simplify_gen_binary
instead of gen_rtx_PLUS.
* simplify-rtx.c (simplify_plus_minus_op_data_cmp): Change return
value to bool. Change function arguments to rtx's and update code
to match.
(simplify_plus_minus): Update the simplify_plus_minus_op_data_cmp
calls to match the new declaration.
* simplify-rtx.c (simplify_associative_operation): Don't
reorder simplify_binary_operation arguments.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126852 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r-- | gcc/rtlanal.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 9535104e707..d948a08d421 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -2877,9 +2877,9 @@ commutative_operand_precedence (rtx op) /* Constants always come the second operand. Prefer "nice" constants. */ if (code == CONST_INT) - return -7; + return -8; if (code == CONST_DOUBLE) - return -6; + return -7; op = avoid_constant_pool_reference (op); code = GET_CODE (op); @@ -2887,22 +2887,24 @@ commutative_operand_precedence (rtx op) { case RTX_CONST_OBJ: if (code == CONST_INT) - return -5; + return -6; if (code == CONST_DOUBLE) - return -4; - return -3; + return -5; + return -4; case RTX_EXTRA: /* SUBREGs of objects should come second. */ if (code == SUBREG && OBJECT_P (SUBREG_REG (op))) - return -2; - + return -3; return 0; case RTX_OBJ: /* Complex expressions should be the first, so decrease priority - of objects. */ - return -1; + of objects. Prefer pointer objects over non pointer objects. */ + if ((REG_P (op) && REG_POINTER (op)) + || (MEM_P (op) && MEM_POINTER (op))) + return -1; + return -2; case RTX_COMM_ARITH: /* Prefer operands that are themselves commutative to be first. @@ -2929,7 +2931,7 @@ commutative_operand_precedence (rtx op) /* Return 1 iff it is necessary to swap operands of commutative operation in order to canonicalize expression. */ -int +bool swap_commutative_operands_p (rtx x, rtx y) { return (commutative_operand_precedence (x) |