aboutsummaryrefslogtreecommitdiff
path: root/gcc/match.pd
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2017-06-27 11:42:38 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2017-06-27 09:42:38 +0000
commit1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2 (patch)
treed28a305d3ebd2b2fe57a0c6fb6116646e7bc98ea /gcc/match.pd
parenta889d6aa2730c084c338576b5a133134f142ce88 (diff)
downloadgcc-1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2.zip
gcc-1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2.tar.gz
gcc-1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2.tar.bz2
Simple reassoc transforms in match.pd
2017-06-27 Marc Glisse <marc.glisse@inria.fr> gcc/ * match.pd ((A+-B)+(C-A), (A+B)-(A-C)): New transformations. gcc/testsuite/ * gcc.dg/tree-ssa/assoc-1.c: New file. From-SVN: r249686
Diffstat (limited to 'gcc/match.pd')
-rw-r--r--gcc/match.pd12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/match.pd b/gcc/match.pd
index a4cae11..083a574 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1321,6 +1321,18 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(simplify
(minus @0 (minus @0 @1))
@1)
+ /* (A +- B) + (C - A) -> C +- B */
+ /* (A + B) - (A - C) -> B + C */
+ /* More cases are handled with comparisons. */
+ (simplify
+ (plus:c (plus:c @0 @1) (minus @2 @0))
+ (plus @2 @1))
+ (simplify
+ (plus:c (minus @0 @1) (minus @2 @0))
+ (minus @2 @1))
+ (simplify
+ (minus (plus:c @0 @1) (minus @0 @2))
+ (plus @1 @2))
/* (A +- CST1) +- CST2 -> A + CST3
Use view_convert because it is safe for vectors and equivalent for