diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2016-01-05 16:06:06 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2016-01-05 16:06:06 +0000 |
commit | a0866effcd38476b14e96b069ac697e08f5f5b79 (patch) | |
tree | 2b0e98778dcdae9cd360e0673ccdbcb12c249605 /gcc/combine.c | |
parent | c589e975638b217501e4e868e7d706bb318e18e9 (diff) | |
download | gcc-a0866effcd38476b14e96b069ac697e08f5f5b79.zip gcc-a0866effcd38476b14e96b069ac697e08f5f5b79.tar.gz gcc-a0866effcd38476b14e96b069ac697e08f5f5b79.tar.bz2 |
[combine][v2] Canonicalise (r + r) to (r << 1) to aid recognition
PR rtl-optimization/68651
* combine.c (combine_simplify_rtx): Canonicalize x + x into
x << 1.
* gcc.target/aarch64/pr68651_1.c: New test.
From-SVN: r232077
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index fd38488..d088031 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5895,6 +5895,13 @@ combine_simplify_rtx (rtx x, machine_mode op0_mode, int in_dest, || XEXP (temp, 1) != XEXP (x, 0))))) return temp; } + + /* Canonicalize x + x into x << 1. */ + if (GET_MODE_CLASS (mode) == MODE_INT + && rtx_equal_p (XEXP (x, 0), XEXP (x, 1)) + && !side_effects_p (XEXP (x, 0))) + return simplify_gen_binary (ASHIFT, mode, XEXP (x, 0), const1_rtx); + break; case MINUS: |