[LLVMdev] PGO for macro expansion code
Diego Novillo
dnovillo at google.com
Thu May 28 12:44:07 PDT 2015
On 05/28/15 15:27, Yuanfang Chen wrote:
> #define GET_BIT(lll) \
> // blah blah
>
> #define G(label1,label2) \
> { \
> // decent amount code \
> ...
> while (1) { \
> GET_BIT(label2); \
> }; \
> }
>
> void f() {
> if (..)
> G('c', 'd');
>
> while ( .. )
> G('a','b');
> }
>
> After perf sampling, a lot of samples that should have landed in G and
> GET_BIT is attributed to the two lines that have G expansion.
> Discriminator does not work either for this case. However the last
> field of DW_TAG_lexical_block ("Unique ID to identify blocks from a
> template function") is unique for all instances of scopes in G and
> GET_BIT. Can we use that to get better profile of hot and cold paths
> inside macro? If not, any workaround for now? Thank you.
Could you file a bug report and add me to the CC list? Please include
details on reproducing it as well (Perf version and how you collected
the profile).
The problem here is that you have an expansion of an expansion, so the
line numbering will be jumbled.
A quick workaround will be to avoid using macros. Can you make one of G
or GET_BIT actual functions? The two calls to GET_BIT in the hot and
cold regions of f() will have the same line+discr info.
Diego.
> Yuanfang
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list