re PR rtl-optimization/48141 (DSE compile time hog)
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Mar 2011 12:35:04 +0000 (13:35 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Mar 2011 12:35:04 +0000 (13:35 +0100)
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.

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

From-SVN: r171089

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

index 8ab1bd0a3f6b67423b0586e149de0b22202a8367..a0bdc239f2de65a52cc038d959934c466813063c 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 8e9b6454e390ff7caba8a55e6c34470b27c1ccfd..e43ab72d7427dba66d68b09bc4ae8c60a2a989e0 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 b05752483d666e391cdb182356b0a56e85985d8c..b76cd474955e4f676e9c4e9af13bf4b3eb66a00f 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;
+}