diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-29 11:21:19 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-29 11:21:19 +0000 |
commit | b622ec2512c6c1587c6fb40da475c9249901ac4f (patch) | |
tree | d41c277b595780348ce12b51329c77c3442d46d6 | |
parent | d2a60e99e6d8285be309b9740a9f29ef153613e9 (diff) | |
download | gcc-b622ec2512c6c1587c6fb40da475c9249901ac4f.tar.gz |
2016-01-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/69547
* tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1):
Do not mark clobbers necessary.
(mark_all_reaching_defs_necessary_1): Likewise.
* g++.dg/tree-ssa/pr69547.C: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232976 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr69547.C | 15 | ||||
-rw-r--r-- | gcc/tree-ssa-dce.c | 6 |
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 268dd61f4bd..3f5972c6664 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-01-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/69547 + * tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): + Do not mark clobbers necessary. + (mark_all_reaching_defs_necessary_1): Likewise. + 2016-01-29 Dominik Vogt <vogt@linux.vnet.ibm.com> * config/s390/s390-c.c (s390_resolve_overloaded_builtin): Format diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d021755eee7..6b2ddbd961b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-01-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/69547 + * g++.dg/tree-ssa/pr69547.C: New testcase. + 2016-01-29 Jakub Jelinek <jakub@redhat.com> PR debug/66869 diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr69547.C b/gcc/testsuite/g++.dg/tree-ssa/pr69547.C new file mode 100644 index 00000000000..30452340a5c --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr69547.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-O2 -fdump-tree-cddce1" } + +struct A { A () { } }; + +void foo (void*, int); + +void bar () +{ + enum { N = 64 }; + A a [N]; + foo (&a, N); +} + +// { dg-final { scan-tree-dump-not "if" "cddce1" } } diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 8c3dd8f4bb8..75aaee97123 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -462,7 +462,8 @@ mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef, void *data) gimple *def_stmt = SSA_NAME_DEF_STMT (vdef); /* All stmts we visit are necessary. */ - mark_operand_necessary (vdef); + if (! gimple_clobber_p (def_stmt)) + mark_operand_necessary (vdef); /* If the stmt lhs kills ref, then we can stop walking. */ if (gimple_has_lhs (def_stmt) @@ -584,7 +585,8 @@ mark_all_reaching_defs_necessary_1 (ao_ref *ref ATTRIBUTE_UNUSED, } } - mark_operand_necessary (vdef); + if (! gimple_clobber_p (def_stmt)) + mark_operand_necessary (vdef); return false; } |