]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/69547 (no-op array initializer emits an empty loop)
authorRichard Biener <rguenther@suse.de>
Fri, 29 Jan 2016 11:21:19 +0000 (11:21 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 29 Jan 2016 11:21:19 +0000 (11:21 +0000)
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.

From-SVN: r232976

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr69547.C [new file with mode: 0644]
gcc/tree-ssa-dce.c

index 268dd61f4bdaa2be35768c850b4dbe282bf14399..3f5972c6664cc1f78d084fe4f5456f478dfd6fde 100644 (file)
@@ -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
index d021755eee7bfdf0381b2589148fa64ae13d9b82..6b2ddbd961bc196a968fc1dd35a6c77cddfbd242 100644 (file)
@@ -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 (file)
index 0000000..3045234
--- /dev/null
@@ -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" } }
index 8c3dd8f4bb8ae586b2f66da9492f71c544232302..75aaee97123d3677454c10bab328bd57d50e2b38 100644 (file)
@@ -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;
 }