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
This commit is contained in:
parent
a889d6aa27
commit
1e7df2e63a
4 changed files with 51 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
2017-06-27 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* match.pd ((A+-B)+(C-A), (A+B)-(A-C)): New transformations.
|
||||
|
||||
2017-06-27 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* builtin-types.def (BT_FENV_T_PTR, BT_CONST_FENV_T_PTR,
|
||||
|
|
12
gcc/match.pd
12
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
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2017-06-27 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* gcc.dg/tree-ssa/assoc-1.c: New file.
|
||||
|
||||
2017-06-27 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/62046
|
||||
|
|
31
gcc/testsuite/gcc.dg/tree-ssa/assoc-1.c
Normal file
31
gcc/testsuite/gcc.dg/tree-ssa/assoc-1.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -fdump-tree-optimized-raw -fno-tree-reassoc" } */
|
||||
|
||||
int f0(int a,int b,int c){
|
||||
int d = a + b;
|
||||
int e = c + b;
|
||||
return d - e;
|
||||
}
|
||||
int f1(int a,int b,int c){
|
||||
int d = a + b;
|
||||
int e = b - c;
|
||||
return d - e;
|
||||
}
|
||||
int f2(int a,int b,int c){
|
||||
int d = a + b;
|
||||
int e = c - b;
|
||||
return e + d;
|
||||
}
|
||||
int f3(int a,int b,int c){
|
||||
int d = a - b;
|
||||
int e = c - b;
|
||||
return d - e;
|
||||
}
|
||||
int f4(int a,int b,int c){
|
||||
int d = b - a;
|
||||
int e = c - b;
|
||||
return e + d;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "plus_expr" 2 "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-times "minus_expr" 3 "optimized" } } */
|
Loading…
Add table
Reference in a new issue