Re: Use simplify_gen_binary in canon_rtx

2016-11-15 Thread Jeff Law

On 11/15/2016 09:07 AM, Richard Sandiford wrote:

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.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Thanks,
Richard


[ This patch is part of the SVE series posted here:
  https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]

gcc/
2016-11-15  Richard Sandiford  <richard.sandif...@arm.com>
Alan Hayward  <alan.hayw...@arm.com>
David Sherwood  <david.sherw...@arm.com>

    * alias.c (canon_rtx): Use simplify_gen_binary.

OK.
jeff



Use simplify_gen_binary in canon_rtx

2016-11-15 Thread Richard Sandiford
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.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Thanks,
Richard


[ This patch is part of the SVE series posted here:
  https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]

gcc/
2016-11-15  Richard Sandiford  <richard.sandif...@arm.com>
Alan Hayward  <alan.hayw...@arm.com>
David Sherwood  <david.sherw...@arm.com>

    * alias.c (canon_rtx): Use simplify_gen_binary.

diff --git a/gcc/alias.c b/gcc/alias.c
index 486d06a..74df23c 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -1800,13 +1800,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