re PR middle-end/89008 (O2 and O1 results differ for simple test)

2019-01-23  Richard Biener  <rguenther@suse.de>

	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: r268186
This commit is contained in:
Richard Biener 2019-01-23 14:02:13 +00:00 committed by Richard Biener
parent 4d0c18c601
commit ef192ae1b6
4 changed files with 39 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-01-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/89008
* tree-ssa-reassoc.c (eliminate_using_constants): For * 0 do
not leave another stray operand.
2019-01-23 Jakub Jelinek <jakub@redhat.com>
* BASE-VER: Bump to 9.0.1.

View File

@ -1,3 +1,8 @@
2019-01-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/89008
* gcc.dg/torture/pr89008.c: New testcase.
2019-01-23 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/opt4.ads: New test.

View File

@ -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;
}

View File

@ -1015,7 +1015,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;
}