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.
/* 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);
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);
}