From 231314e360037e711922ece00817f8c2abc7aec0 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 15 Nov 2016 18:16:59 +0000 Subject: [PATCH] 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/ChangeLog | 6 ++++++ gcc/alias.c | 8 +------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a2dd3cd71e..5e3e8a1c1cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-15 Richard Sandiford + Alan Hayward + David Sherwood + + * alias.c (canon_rtx): Use simplify_gen_binary. + 2016-11-15 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/alias.c b/gcc/alias.c index 1ea2417bed1..546ae7ff891 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 -- 2.30.2