https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83336
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-12-11 Ever confirmed|0 |1 --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- Elsewhere dwarf people were complaining about a non 1:1 match of the scope tree of abstract and concrete instances as well which would suggest to never prune any BLOCKs... Note the artificial inline BLOCK might be not too excessive to preserve. OTOH for testcases like tramp3d we have about 10 function calls per final emitted assembly statement. That is, for heavily abstracted C++ code not pruning BLOCKs might cause an excessive increase in memory usage. Shrinking tree_block might be a good idea - obvious candidates are abstract_flag/block_num (re-use tree_base u.? but likely lang-flags are used...) and of course fragment_origin/chain which is only used during very late RTL. Eventually move that offline into sth also containing the die member (similar lifetime). The distinction between VARS and nonlocalized_vars is also not really necessary if we get rid of the BLOCK_VARS chaining via DECL_CHAIN and instead use the vec approach for all of them. That said, WPA stage should no longer stream all BLOCK trees (double-check that), so the LTO argument might be moot but the general argument still valid (see the tramp3d example or possibly any of the weird boost template metaprogramming examples).