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).

Reply via email to