Use simplify_gen_binary in canon_rtx
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 15 Nov 2016 18:16:59 +0000 (18:16 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 15 Nov 2016 18:16:59 +0000 (18:16 +0000)
commit231314e360037e711922ece00817f8c2abc7aec0
tree480ffac9e966d889d8dd72c69996fa9c06069cf4
parent3712c7a30197c43bc98d46e344391287da16d7e1
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  <richard.sandiford@arm.com>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

* alias.c (canon_rtx): Use simplify_gen_binary.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r242445
gcc/ChangeLog
gcc/alias.c