diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-25 10:49:55 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-04-25 10:49:55 +0000 |
commit | ab99f46749d0f746c50dde27e845ed6e5f06aee4 (patch) | |
tree | 7849aae88789ca5496d8e3c5ad4a134e378b42a7 /gcc | |
parent | e52477c7e2525d9ebffcc47de2d226452e6fbafc (diff) | |
download | gcc-ab99f46749d0f746c50dde27e845ed6e5f06aee4.zip gcc-ab99f46749d0f746c50dde27e845ed6e5f06aee4.tar.gz gcc-ab99f46749d0f746c50dde27e845ed6e5f06aee4.tar.bz2 |
re PR tree-optimization/70780 (wrong code at -O2 and -O3 on x86_64-linux-gnu)
2016-04-25 Richard Biener <rguenther@suse.de>
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr70780.c | 26 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 3 |
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e70bcaf..2dac38e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,13 @@ +2016-04-25 Richard Biener <rguenther@suse.de> + + 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 <michael.collison@linaro.org> + * ChangeLog(2016-04-25): Fix ChangeLog formatting. 2016-04-25 Michael Collison <michael.collison@linaro.org> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d49f189..bbaa3a2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/70780 + * gcc.dg/torture/pr70780.c: New testcase. + 2016-04-25 Michael Collison <michael.collison@arm.com> * 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 0000000..2f7a5cb --- /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 2d1eb70..7b9eb2e 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: |