summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-29 11:21:19 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-29 11:21:19 +0000
commitb622ec2512c6c1587c6fb40da475c9249901ac4f (patch)
treed41c277b595780348ce12b51329c77c3442d46d6
parentd2a60e99e6d8285be309b9740a9f29ef153613e9 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr69547.C15
-rw-r--r--gcc/tree-ssa-dce.c6
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;
}