From 515f36ebd9df15ba503f02dbc77a32183ec03664 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 6 Sep 2007 09:05:58 +0000 Subject: re PR tree-optimization/33302 (dead-store not eliminated) 2007-09-06 Richard Guenther PR tree-optimization/33302 * tree-ssa-dse.c (tree_ssa_dse): Connect infinite loops to the exit block before doing the post-dominator walk. * domwalk.c (walk_dominator_tree): The exit block is interesting even if it is not reachable. * gcc.dg/tree-ssa/ssa-dse-11.c: New testcase. From-SVN: r128180 --- gcc/ChangeLog | 6 ++++++ gcc/domwalk.c | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-11.c | 21 +++++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-11.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55694f0..39caec6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-09-06 Richard Guenther + + PR tree-optimization/33302 + * domwalk.c (walk_dominator_tree): The exit block is + interesting even if it is not reachable. + 2007-09-06 Richard Sandiford PR middle-end/33306 diff --git a/gcc/domwalk.c b/gcc/domwalk.c index a58437e..fb7f072 100644 --- a/gcc/domwalk.c +++ b/gcc/domwalk.c @@ -151,7 +151,9 @@ walk_dominator_tree (struct dom_walk_data *walk_data, basic_block bb) while (true) { /* Don't worry about unreachable blocks. */ - if (EDGE_COUNT (bb->preds) > 0 || bb == ENTRY_BLOCK_PTR) + if (EDGE_COUNT (bb->preds) > 0 + || bb == ENTRY_BLOCK_PTR + || bb == EXIT_BLOCK_PTR) { /* If block BB is not interesting to the caller, then none of the callbacks that walk the statements in BB are going to be diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c48beda..c6bb8f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-09-06 Richard Guenther + + PR tree-optimization/33302 + * gcc.dg/tree-ssa/ssa-dse-11.c: New testcase. + 2007-09-06 Jerry DeLisle PR libfortran/33225 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-11.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-11.c new file mode 100644 index 0000000..bd66bc2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-11.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-dse1-details" } */ + +extern void abort(void); +void foo(int *p) +{ + while (1) + { + *p = 0; + *p = 0; + } +} +void bar(int *p) +{ + *p = 0; + *p = 0; + abort (); +} + +/* { dg-final { scan-tree-dump-times "Deleted dead store" 2 "dse1" } } */ +/* { dg-final { cleanup-tree-dump "dse1" } } */ -- cgit v1.1