aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-08-03 14:08:15 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-08-03 14:08:15 +0000
commit297db279102e9c5f5b32f0580a303dab6a0a5fd5 (patch)
tree9649644dcc0e27784f34ef9e8c353bf6169b6563
parent75560de5f5df4a003ecf80e28bf2b926ba758e55 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/reassoc-23.c7
-rw-r--r--gcc/tree-ssa-reassoc.c4
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;
}