diff options
author | Richard Biener <rguenther@suse.de> | 2017-08-01 10:47:14 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-08-01 10:47:14 +0000 |
commit | 34e5c5116fa58f77ea5eef61d8fb6b9e91c92d79 (patch) | |
tree | 6180256fcd038c7f361f782de52817a7c47b4fb4 /gcc/cfganal.c | |
parent | 35c38fa674ab01152c743f421226f3cbc829cd94 (diff) | |
download | gcc-34e5c5116fa58f77ea5eef61d8fb6b9e91c92d79.zip gcc-34e5c5116fa58f77ea5eef61d8fb6b9e91c92d79.tar.gz gcc-34e5c5116fa58f77ea5eef61d8fb6b9e91c92d79.tar.bz2 |
tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
2017-08-01 Richard Biener <rguenther@suse.de>
* tree-ssa-pre.c (print_pre_expr): Handle NULL expr.
(compute_antic): Seed worklist with exit block predecessors.
* cfganal.c (dfs_find_deadend): For a cycle return the source
of the edge closing it.
* gcc.dg/tree-ssa/ssa-dce-3.c: Adjust.
* gcc.dg/tree-ssa/split-path-5.c: Remove case with just dead
endless loop.
* gcc.dg/uninit-23.c: Adjust.
From-SVN: r250767
Diffstat (limited to 'gcc/cfganal.c')
-rw-r--r-- | gcc/cfganal.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/gcc/cfganal.c b/gcc/cfganal.c index 792ea62..394d986 100644 --- a/gcc/cfganal.c +++ b/gcc/cfganal.c @@ -737,23 +737,24 @@ post_order_compute (int *post_order, bool include_entry_exit, basic_block dfs_find_deadend (basic_block bb) { - bitmap visited = BITMAP_ALLOC (NULL); + auto_bitmap visited; + basic_block next = bb; for (;;) { - if (EDGE_COUNT (bb->succs) == 0 - || ! bitmap_set_bit (visited, bb->index)) - { - BITMAP_FREE (visited); - return bb; - } + if (EDGE_COUNT (next->succs) == 0) + return next; + + if (! bitmap_set_bit (visited, next->index)) + return bb; + bb = next; /* If we are in an analyzed cycle make sure to try exiting it. Note this is a heuristic only and expected to work when loop fixup is needed as well. */ if (! bb->loop_father || ! loop_outer (bb->loop_father)) - bb = EDGE_SUCC (bb, 0)->dest; + next = EDGE_SUCC (bb, 0)->dest; else { edge_iterator ei; @@ -761,7 +762,7 @@ dfs_find_deadend (basic_block bb) FOR_EACH_EDGE (e, ei, bb->succs) if (loop_exit_edge_p (bb->loop_father, e)) break; - bb = e ? e->dest : EDGE_SUCC (bb, 0)->dest; + next = e ? e->dest : EDGE_SUCC (bb, 0)->dest; } } |