]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/57361 (Remove self memory assignment)
authorMarc Glisse <marc.glisse@inria.fr>
Wed, 12 Jun 2013 17:56:30 +0000 (19:56 +0200)
committerMarc Glisse <glisse@gcc.gnu.org>
Wed, 12 Jun 2013 17:56:30 +0000 (17:56 +0000)
2013-06-12  Marc Glisse  <marc.glisse@inria.fr>

PR tree-optimization/57361
gcc/
* tree-ssa-dse.c (dse_possible_dead_store_p): Handle self-assignment.

gcc/testsuite/
* gcc.dg/tree-ssa/pr57361.c: New file.

From-SVN: r200034

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr57361.c [new file with mode: 0644]
gcc/tree-ssa-dse.c

index 0b154319344d7bcc6c753f16f1bfc5422f800d1a..ec3daf24ed6bb2023b482d2f1658c295cfbfeec9 100644 (file)
@@ -1,3 +1,8 @@
+2013-06-12  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/57361
+       * tree-ssa-dse.c (dse_possible_dead_store_p): Handle self-assignment.
+
 2013-06-12  Sofiane Naci  <sofiane.naci@arm.com>
 
        * config/aarch64/aarch64-simd.md (aarch64_combine<mode>): convert to split.
index 187f2ef0641f7c859bcf6e2e8829f69e0d86a420..dc29124a7ee26c4f01c7bf82cde66c416de35ec3 100644 (file)
@@ -1,3 +1,8 @@
+2013-06-12  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR tree-optimization/57361
+       * gcc.dg/tree-ssa/pr57361.c: New file.
+
 2013-06-12  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
        * gcc.target/arm/unaligned-memcpy-4.c (src, dst): Initialize
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr57361.c b/gcc/testsuite/gcc.dg/tree-ssa/pr57361.c
new file mode 100644 (file)
index 0000000..81f27b3
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-dse1-details" } */
+
+struct A { int x; double y; };
+void f (struct A *a) {
+  *a = *a;
+}
+
+/* { dg-final { scan-tree-dump "Deleted dead store" "dse1"} } */
index ad99ea9d5d403fde3f413351c8a075ac92c3802b..39f47abd83be37df4114e767d050b2491a1899ad 100644 (file)
@@ -84,6 +84,13 @@ dse_possible_dead_store_p (gimple stmt, gimple *use_stmt)
 
   *use_stmt = NULL;
 
+  /* Self-assignments are zombies.  */
+  if (operand_equal_p (gimple_assign_rhs1 (stmt), gimple_assign_lhs (stmt), 0))
+    {
+      *use_stmt = stmt;
+      return true;
+    }
+
   /* Find the first dominated statement that clobbers (part of) the
      memory stmt stores to with no intermediate statement that may use
      part of the memory stmt stores.  That is, find a store that may