diff options
author | Richard Biener <rguenther@suse.de> | 2025-02-10 10:23:45 +0100 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2025-03-07 09:59:18 +0100 |
commit | e1c49f413c8c892a61612b3b89de0607ff7ba893 (patch) | |
tree | 50bb2b327f48d2ff28420d7e318b78f7a2a6e667 /gcc | |
parent | 888e70b322622528dac17f04738ffa232c6fb82d (diff) | |
download | gcc-e1c49f413c8c892a61612b3b89de0607ff7ba893.zip gcc-e1c49f413c8c892a61612b3b89de0607ff7ba893.tar.gz gcc-e1c49f413c8c892a61612b3b89de0607ff7ba893.tar.bz2 |
middle-end/118801 - excessive redundant DEBUG BEGIN_STMT
The following addresses the fact that we keep an excessive amount of
redundant DEBUG BEGIN_STMTs - in the testcase it sums up to 99.999%
of all stmts, sucking up compile-time in IL walks. The patch amends
the GIMPLE DCE code that elides redundant DEBUG BIND stmts, also
pruning uninterrupted sequences of DEBUG BEGIN_STMTs, keeping only
the last of each set of DEBUG BEGIN_STMT with unique location.
PR middle-end/118801
* tree-ssa-dce.cc (eliminate_unnecessary_stmts): Prune
sequences of uninterrupted DEBUG BEGIN_STMTs, keeping only
the last of a set with unique location.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-ssa-dce.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index 18af818..ba9cd65 100644 --- a/gcc/tree-ssa-dce.cc +++ b/gcc/tree-ssa-dce.cc @@ -1508,6 +1508,7 @@ eliminate_unnecessary_stmts (bool aggressive) /* Remove dead statements. */ auto_bitmap debug_seen; + hash_set<int_hash <location_t, 0>> locs_seen; for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi) { stmt = gsi_stmt (gsi); @@ -1670,6 +1671,15 @@ eliminate_unnecessary_stmts (bool aggressive) remove_dead_stmt (&gsi, bb, to_remove_edges); continue; } + else if (gimple_debug_begin_stmt_p (stmt)) + { + /* We are only keeping the last debug-begin in a series of + debug-begin stmts. */ + if (locs_seen.add (gimple_location (stmt))) + remove_dead_stmt (&gsi, bb, to_remove_edges); + continue; + } + locs_seen.empty (); bitmap_clear (debug_seen); } |