[LLVMdev] Inline hint for methods defined in-class
Easwaran Raman
eraman at google.com
Wed Jun 24 13:27:27 PDT 2015
The method to identify functions with in-class definitions is one part
of my question. Even if there is a way to do that without passing the
hint, I'm interested in getting feedback on treating it at-par with
functions having the inline hint in inline cost analysis.
Thanks,
Easwaran
On Wed, Jun 24, 2015 at 12:56 PM, Xinliang David Li
<xinliangli at gmail.com> wrote:
> The problem is that the other way around is not true: a function
> linkonce_odr linkage may be neither inline declared nor have in-class
> definition.
>
> David
>
>
> On Wed, Jun 24, 2015 at 11:53 AM, Robinson, Paul
> <Paul_Robinson at playstation.sony.com> wrote:
>>
>>
>>
>> > -----Original Message-----
>> > From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
>> > On
>> > Behalf Of Easwaran Raman
>> > Sent: Wednesday, June 24, 2015 9:54 AM
>> > To: Xinliang David Li
>> > Cc: <llvmdev at cs.uiuc.edu> List
>> > Subject: Re: [LLVMdev] Inline hint for methods defined in-class
>> >
>> > Ping.
>> >
>> > On Wed, Jun 17, 2015 at 4:13 PM, Xinliang David Li <davidxl at google.com>
>> > wrote:
>> > > that looks like a different fix. The case mentioned by Easwaran is
>> > >
>> > > class A{
>> > > int foo () { return 1; }
>> > > ...
>> > > };
>> > >
>> > > where 'foo' is not explicitly declared with 'inline' keyword.
>> > >
>> > > David
>> > >
>> > > On Wed, Jun 17, 2015 at 4:07 PM, Balaram Makam <bmakam at codeaurora.org>
>> > wrote:
>> > >> AFAIK, this was fixed in r233817.
>>
>> That was later reverted.
>>
>> > >>
>> > >> -----Original Message-----
>> > >> From: llvmdev-bounces at cs.uiuc.edu
>> > >> [mailto:llvmdev-bounces at cs.uiuc.edu]
>> > On
>> > >> Behalf Of Easwaran Raman
>> > >> Sent: Wednesday, June 17, 2015 6:59 PM
>> > >> To: llvmdev at cs.uiuc.edu
>> > >> Cc: David Li
>> > >> Subject: [LLVMdev] Inline hint for methods defined in-class
>> > >>
>> > >> Clang adds the InlineHint attribute to functions that are explicitly
>> > marked
>> > >> inline, but not if they are defined in the class body. I tried the
>> > following
>> > >> patch, which I believe handles the in-class definition
>> > >> case:
>> > >>
>> > >> --- a/lib/CodeGen/CodeGenFunction.cpp
>> > >> +++ b/lib/CodeGen/CodeGenFunction.cpp
>> > >> @@ -630,7 +630,7 @@ void CodeGenFunction::StartFunction(GlobalDecl
>> > >> GD,
>> > >> if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
>> > >> if (!CGM.getCodeGenOpts().NoInline) {
>> > >> for (auto RI : FD->redecls())
>> > >> - if (RI->isInlineSpecified()) {
>> > >> + if (RI->isInlined()) {
>> > >> Fn->addFnAttr(llvm::Attribute::InlineHint);
>> > >> break;
>> > >> }
>> > >>
>> > >> I tried this on C++ benchmarks in SPEC 2006. There is no noticeable
>> > >> performance difference and the maximum text size increase is < 0.25%.
>> > >> I then built clang with and without this change. This increases the
>> > text
>> > >> size by 4.1%. For measuring performance, I compiled a large (4.8
>> > million
>> > >> lines) preprocessed file. This change improves runtime performance by
>> > 0.9%
>> > >> (average of 10 runs) in O0 and O2.
>> > >>
>> > >> I think knowing whether a function is defined inside a class body is
>> > >> a
>> > >> useful hint to the inliner. FWIW, GCC's inliner doesn't differentiate
>> > these
>> > >> from explicit inline functions. If the above results doesn't justify
>> > this
>> > >> change, are there other benchmarks that I should evaluate? Another
>> > >> possibility is to add a separate hint for this instead of using the
>> > existing
>> > >> inlinehint to allow for better tuning in the inliner.
>>
>> A function with an in-class definition will have linkonce_odr linkage,
>> so it should be possible to identify such functions in the inliner
>> without introducing the inlinehint attribute.
>> --paulr
>>
>> > >>
>> > >> Thanks,
>> > >> Easwaran
>> > >> _______________________________________________
>> > >> LLVM Developers mailing list
>> > >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> > >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>> > >>
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>> _______________________________________________
>> 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