From 231314e360037e711922ece00817f8c2abc7aec0 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 15 Nov 2016 18:16:59 +0000 Subject: Use simplify_gen_binary in canon_rtx After simplifying the operands of a PLUS, canon_rtx checked only for cases in which one of the simplified operands was a constant, falling back to gen_rtx_PLUS otherwise. This left the PLUS in a non-canonical order if one of the simplified operands was (plus (reg R1) (const_int X)); we'd end up with: (plus (plus (reg R1) (const_int Y)) (reg R2)) rather than: (plus (plus (reg R1) (reg R2)) (const_int Y)) Fixing this exposed new DSE opportunities on spu-elf in gcc.c-torture/execute/builtins/strcat-chk.c but otherwise it doesn't seem to have much practical effect. gcc/ 2016-11-15 Richard Sandiford Alan Hayward David Sherwood * alias.c (canon_rtx): Use simplify_gen_binary. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r242445 --- gcc/alias.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'gcc/alias.c') diff --git a/gcc/alias.c b/gcc/alias.c index 1ea2417..546ae7f 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1708,13 +1708,7 @@ canon_rtx (rtx x) rtx x1 = canon_rtx (XEXP (x, 1)); if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1)) - { - if (CONST_INT_P (x0)) - return plus_constant (GET_MODE (x), x1, INTVAL (x0)); - else if (CONST_INT_P (x1)) - return plus_constant (GET_MODE (x), x0, INTVAL (x1)); - return gen_rtx_PLUS (GET_MODE (x), x0, x1); - } + return simplify_gen_binary (PLUS, GET_MODE (x), x0, x1); } /* This gives us much better alias analysis when called from -- cgit v1.1