diff options
author | Richard Biener <rguenther@suse.de> | 2019-05-02 11:17:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-05-02 11:17:00 +0000 |
commit | c27998546ac2291ceffbf1f998f6e46e6b8ad6eb (patch) | |
tree | c0a3ee9df92f78e5eb6d651ce6ba2fc506ce38d4 /gcc/tree-ssa-dce.c | |
parent | 9feeafd7f95ea9f7211908c137c60074b3a52da2 (diff) | |
download | gcc-c27998546ac2291ceffbf1f998f6e46e6b8ad6eb.zip gcc-c27998546ac2291ceffbf1f998f6e46e6b8ad6eb.tar.gz gcc-c27998546ac2291ceffbf1f998f6e46e6b8ad6eb.tar.bz2 |
re PR tree-optimization/90273 (GCC runs out of memory building Firefox)
2019-05-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/90273
* tree-ssa-dce.c (eliminate_unnecessary_stmts): Eliminate
useless debug stmts.
From-SVN: r270791
Diffstat (limited to 'gcc/tree-ssa-dce.c')
-rw-r--r-- | gcc/tree-ssa-dce.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index c0e1227..4853f0bd 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -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. */ |