OSDN Git Service

PR rtl-optimization/48141
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Mar 2011 12:35:04 +0000 (12:35 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Mar 2011 12:35:04 +0000 (12:35 +0000)
* dse.c (record_store): If no positions are needed in an insn
that cannot be deleted, at least unchain it from active_local_stores.

* gcc.dg/pr48141.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171089 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/dse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr48141.c [new file with mode: 0644]

index 8ab1bd0..a0bdc23 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/48141
+       * dse.c (record_store): If no positions are needed in an insn
+       that cannot be deleted, at least unchain it from active_local_stores.
+
 2011-03-16  Dodji Seketeli  <dodji@redhat.com>
 
        PR debug/47510
index 8e9b645..e43ab72 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1,5 +1,5 @@
 /* RTL dead store elimination.
-   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
    Contributed by Richard Sandiford <rsandifor@codesourcery.com>
@@ -1530,8 +1530,7 @@ record_store (rtx body, bb_info_t bb_info)
 
       /* An insn can be deleted if every position of every one of
         its s_infos is zero.  */
-      if (any_positions_needed_p (s_info)
-         || ptr->cannot_delete)
+      if (any_positions_needed_p (s_info))
        del = false;
 
       if (del)
@@ -1543,7 +1542,8 @@ record_store (rtx body, bb_info_t bb_info)
          else
            active_local_stores = ptr->next_local_store;
 
-         delete_dead_store_insn (insn_to_delete);
+         if (!insn_to_delete->cannot_delete)
+           delete_dead_store_insn (insn_to_delete);
        }
       else
        last = ptr;
index b057524..b76cd47 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/48141
+       * gcc.dg/pr48141.c: New test.
+
 2011-03-16  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/cpp0x/constexpr-48089.C: New.
diff --git a/gcc/testsuite/gcc.dg/pr48141.c b/gcc/testsuite/gcc.dg/pr48141.c
new file mode 100644 (file)
index 0000000..006f5cb
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR rtl-optimization/48141 */
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+#define A i = 0;
+#define B A A A A A A A A A A
+#define C B B B B B B B B B B
+#define D C C C C C C C C C C
+#define E D D D D D D D D D D
+
+int
+foo (void)
+{
+  volatile int i = 0;
+  E E E E E E E E E E E
+  return 0;
+}