aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorPeter Bergner <bergner@vnet.ibm.com>2007-07-23 16:43:24 +0000
committerPeter Bergner <bergner@vnet.ibm.com>2007-07-23 16:43:24 +0000
commit384dff278b4b2677d1b916e80c249c9c7f181ad0 (patch)
treeff49113424954fc128f22d29310fdf6c0c984bbc /gcc/optabs.c
parenta0fec52acae61a2ebf275df4a9aa8ef5b8d8c6a0 (diff)
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: https://gcc.gnu.org/svn/gcc/trunk@126852 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index c754544f10f..b65d6002f2b 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -4070,9 +4070,11 @@ emit_cmp_and_jump_insns (rtx x, rtx y, enum rtx_code comparison, rtx size,
/* Swap operands and condition to ensure canonical RTL. */
if (swap_commutative_operands_p (x, y))
{
- /* If we're not emitting a branch, this means some caller
- is out of sync. */
- gcc_assert (label);
+ /* If we're not emitting a branch, callers are required to pass
+ operands in an order conforming to canonical RTL. We relax this
+ for commutative comparsions so callers using EQ don't need to do
+ swapping by hand. */
+ gcc_assert (label || (comparison == swap_condition (comparison)));
op0 = y, op1 = x;
comparison = swap_condition (comparison);