From 5402bc4ab8d82b8d4b7274c261a5f3e692ad27c0 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 24 Jan 2019 11:07:19 +0000 Subject: [PATCH] backport: re PR middle-end/89008 (O2 and O1 results differ for simple test) 2019-01-24 Richard Biener Backport from mainline 2019-01-23 Richard Biener PR tree-optimization/89008 * tree-ssa-reassoc.c (eliminate_using_constants): For * 0 do not leave another stray operand. * gcc.dg/torture/pr89008.c: New testcase. From-SVN: r268235 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/torture/pr89008.c | 27 ++++++++++++++++++++++++++ gcc/tree-ssa-reassoc.c | 2 +- 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr89008.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8473b0d799b..5be5bab18c64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2019-01-24 Richard Biener + + Backport from mainline + 2019-01-23 Richard Biener + + PR tree-optimization/89008 + * tree-ssa-reassoc.c (eliminate_using_constants): For * 0 do + not leave another stray operand. + 2019-01-22 Uroš Bizjak PR target/88938 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5a2ad99ffab5..1c5f79aadd9b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-01-24 Richard Biener + + Backport from mainline + 2019-01-23 Richard Biener + + PR tree-optimization/89008 + * gcc.dg/torture/pr89008.c: New testcase. + 2019-01-22 Uroš Bizjak PR target/88938 diff --git a/gcc/testsuite/gcc.dg/torture/pr89008.c b/gcc/testsuite/gcc.dg/torture/pr89008.c new file mode 100644 index 000000000000..aa13f94a44e5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr89008.c @@ -0,0 +1,27 @@ +/* { dg-do run } */ +/* { dg-require-effective-target int32plus } */ + +unsigned long a, c; +unsigned b; +int d, e; +long f() +{ + unsigned long g = 0; + for (d = 0; d < 5; d += 2) + for (e = 0; e < 5; e += 3) + { + c = 4 + b; + g = -b - b; + b = 5 * (b << 24); + } + a = g; + return 0; +} + +int main() +{ + f(); + if (a) + __builtin_abort(); + return 0; +} diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index e6562c6c9ba1..b4f13ef75c4d 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1012,7 +1012,7 @@ eliminate_using_constants (enum tree_code opcode, fprintf (dump_file, "Found * 0, removing all other ops\n"); reassociate_stats.ops_eliminated += ops->length () - 1; - ops->truncate (1); + ops->truncate (0); ops->quick_push (oelast); return; } -- 2.47.2