From: Richard Biener Date: Mon, 25 Apr 2016 10:49:55 +0000 (+0000) Subject: re PR tree-optimization/70780 (wrong code at -O2 and -O3 on x86_64-linux-gnu) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ab99f46749d0f746c50dde27e845ed6e5f06aee4;p=gcc.git re PR tree-optimization/70780 (wrong code at -O2 and -O3 on x86_64-linux-gnu) 2016-04-25 Richard Biener PR tree-optimization/70780 * tree-ssa-pre.c (compute_antic_aux): Also return true if the block wasn't visited yet. (compute_antic): Mark blocks with abnormal preds as visited as they have a final empty antic-in solution already. * gcc.dg/torture/pr70780.c: New testcase. From-SVN: r235407 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e70bcaf6ba5..2dac38eff7b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,13 @@ +2016-04-25 Richard Biener + + PR tree-optimization/70780 + * tree-ssa-pre.c (compute_antic_aux): Also return true if the block + wasn't visited yet. + (compute_antic): Mark blocks with abnormal preds as visited as + they have a final empty antic-in solution already. + 2016-04-25 Michael Collison + * ChangeLog(2016-04-25): Fix ChangeLog formatting. 2016-04-25 Michael Collison diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d49f1895160..bbaa3a2f1a2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-25 Richard Biener + + PR tree-optimization/70780 + * gcc.dg/torture/pr70780.c: New testcase. + 2016-04-25 Michael Collison * testsuite/gcc.target/arm/neon-vaddws16.c: New test. diff --git a/gcc/testsuite/gcc.dg/torture/pr70780.c b/gcc/testsuite/gcc.dg/torture/pr70780.c new file mode 100644 index 00000000000..2f7a5cbea06 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr70780.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ + +int a, b, c, *d, e; + +static int +fn1 () +{ + if (a) + goto l1; +l2: while (b) + if (*d) + return c; + for (e = 0; e; e++) + { + goto l2; +l1:; + } + return 0; +} + +int +main () +{ + fn1 (); + return 0; +} diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 2d1eb70c03b..7b9eb2e5b9c 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2077,6 +2077,7 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) unsigned int bii; edge e; edge_iterator ei; + bool was_visited = BB_VISITED (block); old = ANTIC_OUT = S = NULL; BB_VISITED (block) = 1; @@ -2167,7 +2168,7 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) clean (ANTIC_IN (block)); - if (!bitmap_set_equal (old, ANTIC_IN (block))) + if (!was_visited || !bitmap_set_equal (old, ANTIC_IN (block))) changed = true; maybe_dump_sets: