[cfe-commits] r162810 - in /cfe/trunk: include/clang/Lex/MacroInfo.h include/clang/Lex/Preprocessor.h lib/Frontend/PrintPreprocessedOutput.cpp lib/Lex/MacroInfo.cpp lib/Lex/PPDirectives.cpp lib/Lex/PPMacroExpansion.cpp lib/Lex/Pragma.cpp lib/Sema

Alexander Kornienko alexfh at google.com
Wed Aug 29 16:40:44 PDT 2012


No, there was no intention to change behavior. But could you provide more
details on this?

On Wed, Aug 29, 2012 at 3:41 PM, Eli Friedman <eli.friedman at gmail.com>wrote:

> On Tue, Aug 28, 2012 at 5:20 PM, Alexander Kornienko <alexfh at google.com>
> wrote:
> > Author: alexfh
> > Date: Tue Aug 28 19:20:03 2012
> > New Revision: 162810
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=162810&view=rev
> > Log:
> > Keep history of macro definitions and #undefs
> >
> > Summary:
> > Summary: Keep history of macro definitions and #undefs with
> corresponding source locations, so that we can later find out all macros
> active in a specified source location. We don't save the history in PCH (no
> need currently). Memory overhead is about sizeof(void*)*3*<number of macro
> definitions and #undefs>+<in-memory size of all #undef'd macros>
> >
> > I've run a test on a file composed of 109 .h files from boost 1.49 on
> x86-64 linux.
> > Stats before this patch:
> > *** Preprocessor Stats:
> > 73222 directives found:
> >   19171 #define.
> >   4345 #undef.
> >   #include/#include_next/#import:
> >     5233 source files entered.
> >     27 max include stack depth
> >   19210 #if/#ifndef/#ifdef.
> >   2384 #else/#elif.
> >   6891 #endif.
> >   408 #pragma.
> > 14466 #if/#ifndef#ifdef regions skipped
> > 80023/451669/1270 obj/fn/builtin macros expanded, 85724 on the fast path.
> > 127145 token paste (##) operations performed, 11008 on the fast path.
> >
> > Preprocessor Memory: 5874615B total
> >   BumpPtr: 4399104
> >   Macro Expanded Tokens: 417768
> >   Predefines Buffer: 8135
> >   Macros: 1048576
> >   #pragma push_macro Info: 0
> >   Poison Reasons: 1024
> >   Comment Handlers: 8
> >
> > Stats with this patch:
> > ...
> > Preprocessor Memory: 7541687B total
> >   BumpPtr: 6066176
> >   Macro Expanded Tokens: 417768
> >   Predefines Buffer: 8135
> >   Macros: 1048576
> >   #pragma push_macro Info: 0
> >   Poison Reasons: 1024
> >   Comment Handlers: 8
> >
> > In my test increase in memory usage is about 1.7Mb, which is ~28% of
> initial preprocessor's memory usage and about 0.8% of clang's total VMM
> allocation.
> >
> > As for CPU overhead, it should only be noticeable when iterating over
> all macros, and should mostly consist of couple extra dereferences and one
> comparison per macro + skipping of #undef'd macros. It's less trivial to
> measure, though, as the preprocessor consumes a very small fraction of
> compilation time.
>
> This patch causes clang's behavior to change on
>
> http://llvm.org/viewvc/llvm-project/clang-tests/trunk/gcc-4_2-testsuite/src/gcc.dg/cpp/mac-dir-1.c?view=markup
> ; is this intentional?
>
> -Eli
>



-- 
Alexander Kornienko | Software Engineer | alexfh at google.com | +49 151 221
77 957
Google Germany GmbH | Dienerstr. 12 | 80331 München
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120829/ebad28bb/attachment.html>


More information about the cfe-commits mailing list