diff options
author | Richard Biener <rguenther@suse.de> | 2017-08-03 14:08:15 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-08-03 14:08:15 +0000 |
commit | 297db279102e9c5f5b32f0580a303dab6a0a5fd5 (patch) | |
tree | 9649644dcc0e27784f34ef9e8c353bf6169b6563 | |
parent | 75560de5f5df4a003ecf80e28bf2b926ba758e55 (diff) | |
download | gcc-297db279102e9c5f5b32f0580a303dab6a0a5fd5.zip gcc-297db279102e9c5f5b32f0580a303dab6a0a5fd5.tar.gz gcc-297db279102e9c5f5b32f0580a303dab6a0a5fd5.tar.bz2 |
tree-ssa-reassoc.c (should_break_up_subtract): Also break up if the use is in USE - X.
2017-08-03 Richard Biener <rguenther@suse.de>
* tree-ssa-reassoc.c (should_break_up_subtract): Also break
up if the use is in USE - X.
* gcc.dg/tree-ssa/reassoc-23.c: Adjust to fool early folding
and CSE.
From-SVN: r250855
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-reassoc.c | 4 |
4 files changed, 17 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e3a8aa..3febddc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-08-03 Richard Biener <rguenther@suse.de> + + * tree-ssa-reassoc.c (should_break_up_subtract): Also break + up if the use is in USE - X. + 2017-08-03 Alexander Monakov <amonakov@ispras.ru> * toplev.c (dumpfile.h): New include. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3613d16..03b6626 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-08-03 Richard Biener <rguenther@suse.de> + + * gcc.dg/tree-ssa/reassoc-23.c: Adjust to fool early folding + and CSE. + 2017-08-03 Richard Biener <rguenther@suse.de> PR middle-end/81148 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c index 0ab967d..a5451ad 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c @@ -6,9 +6,10 @@ foo(unsigned int a, unsigned int b, unsigned int c, unsigned int d, unsigned int e, unsigned int f, unsigned int g, unsigned int h) { /* Should be transformed into e = 20 */ - unsigned int i = (a + 9) + (c + 8); - unsigned int j = (-c + 1) + (-a + 2); - + unsigned int i = (a + 9); + unsigned int j = (-c + 1); + i += (c + 8); + j += (-a + 2); e = i + j; return e; } diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 6ecba809..561acea 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -4729,7 +4729,9 @@ should_break_up_subtract (gimple *stmt) && (immusestmt = get_single_immediate_use (lhs)) && is_gimple_assign (immusestmt) && (gimple_assign_rhs_code (immusestmt) == PLUS_EXPR - || gimple_assign_rhs_code (immusestmt) == MULT_EXPR)) + || (gimple_assign_rhs_code (immusestmt) == MINUS_EXPR + && gimple_assign_rhs1 (immusestmt) == lhs) + || gimple_assign_rhs_code (immusestmt) == MULT_EXPR)) return true; return false; } |