[cfe-dev] Should dump methods be LLVM_ATTRIBUTE_USED only in debug builds?

Chandler Carruth chandlerc at google.com
Fri Dec 27 17:01:02 PST 2013


On Fri, Dec 27, 2013 at 7:46 PM, Nico Weber <thakis at chromium.org> wrote:

> Hi,
>
> r151033 and r151037 marked a few dump() methods as LLVM_ATTRIBUTE_USED,
> and over time this inspired marking several other dump() methods to be
> marked as such too (see e.g. 178400, 182186, 159790, 173548).
>
> I understand that having the dump() methods available in the debugger is
> useful, but these annotations prevent the dump() methods from being
> dead-stripped, and they end up keeping lots of code alive. For example,
> clang-format depends on ASTDumper, TypePrinter, StmtVisitor and related
> stuff solely for these dump methods.
>
> Since binaries now get dead-stripped, this leads to measurable bloat:
> clang-format goes from 1.7 MB to 1.2 MB if I remove the
> LLVM_ATTRIBUTE_USEDs on the 17 dump methods in include/clang – an almost
> 30% reduction.
>
> Does it make sense to only mark dump methods as LLVM_ATTRIBUTE_USED if
> !NDEBUG?
>

I think what makes sense is to not have these methods in !NDEBUG. This is
the way dump methods are being written in LLVM these days:

#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
  void some_helper_function_only_used_by_dump() const;
  void LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED dump() const;
#endif

At least, this is how SROA.cpp does it, and I think it has been suggested
to do it consistently in this way.

My preference would be to:

a) Make this pattern easier to reproduce where needed.
b) Try to make existing dump code use it more regularly throughout both
LLVM and Clang to fix just the problem you've identified.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131227/0e9661d7/attachment.html>


More information about the cfe-dev mailing list