]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/90273 (GCC runs out of memory building Firefox)
authorRichard Biener <rguenther@suse.de>
Tue, 30 Apr 2019 07:40:06 +0000 (07:40 +0000)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 Apr 2019 07:40:06 +0000 (09:40 +0200)
PR tree-optimization/90273
* tree-ssa-dce.c (eliminate_unnecessary_stmts): Eliminate
useless debug stmts.

From-SVN: r270674

gcc/ChangeLog
gcc/tree-ssa-dce.c

index 076f51e31f535a085586476dc8115a7cac907be7..44e64ddd1b54b90e59e7d29fa1959be5d6ddeb6d 100644 (file)
@@ -1,3 +1,9 @@
+2019-04-30  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/90273
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Eliminate
+       useless debug stmts.
+
 2019-04-27  Iain Buclaw  <ibuclaw@gdcproject.org>
 
        * config/netbsd-d.c: Include memmodel.h.  Remove unused tree.h,
index c0e122722c0dcfa70b455edaef97779f760c4494..4853f0bd73e1eba28a80b3a6166aef5be9a9b80d 100644 (file)
@@ -1237,6 +1237,7 @@ eliminate_unnecessary_stmts (void)
       bb = h.pop ();
 
       /* Remove dead statements.  */
+      auto_bitmap debug_seen;
       for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi)
        {
          stmt = gsi_stmt (gsi);
@@ -1282,11 +1283,15 @@ eliminate_unnecessary_stmts (void)
                        }
                    }
                  if (!dead)
-                   continue;
+                   {
+                     bitmap_clear (debug_seen);
+                     continue;
+                   }
                }
              if (!is_gimple_debug (stmt))
                something_changed = true;
              remove_dead_stmt (&gsi, bb, to_remove_edges);
+             continue;
            }
          else if (is_gimple_call (stmt))
            {
@@ -1352,6 +1357,18 @@ eliminate_unnecessary_stmts (void)
                    break;
                  }
            }
+         else if (gimple_debug_bind_p (stmt))
+           {
+             /* We are only keeping the last debug-bind of a
+                non-DEBUG_EXPR_DECL variable in a series of
+                debug-bind stmts.  */
+             tree var = gimple_debug_bind_get_var (stmt);
+             if (TREE_CODE (var) != DEBUG_EXPR_DECL
+                 && !bitmap_set_bit (debug_seen, DECL_UID (var)))
+               remove_dead_stmt (&gsi, bb, to_remove_edges);
+             continue;
+           }
+         bitmap_clear (debug_seen);
        }
 
       /* Remove dead PHI nodes.  */