junbuml added a comment.

The basic idea of this change is to avoid inlining callsites invoked in 
exception handling regions (EHR) so that we can reduce code size blow-up in 
very cold regions and indirectly increase inline opportunities for functions 
containing exception handling code.

I think the best way to implement this is influencing to the inline heuristic 
by smoothly decreasing the threshold for the callsites in EHR. From this 
perspective, Attribute::Cold seems to be the right attribute to be added. 
However, the current ColdThreshold is still not tuned yet (r200898) and too 
high to conservatively perform inlining in EHR.

As a work-around, in my current implementation, both Cold and NoInline are 
added to the callsites. I understand that the NoInline is somewhat strong 
attribute to be added, but I don't think there is any negative impact on 
performance unless the execution logic really depends on exception handling 
flows, which is rare. The only downsides I can think of is the case where the 
callee is very small so that inlining it is profitable for size, but the impact 
must be minor.

If using NoInline is too strong to use, another work-around could be 
introducing a new attribute something like "ColdInEHR", and then we decrease 
the inline threshold for the callsites marked with this attribute.  
OptSizeThreshold(75)  could be considered to be a candidate for the default 
threshold.

Unless there is a strong objection about the basic idea, I want to move forward 
and close this issue as soon as possible. Please let me know any opinion.


http://reviews.llvm.org/D13304



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to