[llvm-dev] Inline constant std::function parameter
Eleftherios Ioannidis via llvm-dev
llvm-dev at lists.llvm.org
Tue May 29 12:44:40 PDT 2018
I was afraid that was the case, since std::function is not a first-class object of LLVM.
Every implementation that I can think of that inlines std::function intrinsically seems a bit awkward, in the way that it will be along the lines:
“Treat this class (std::function) in a special way”
A better way would be to generalize for all callables, and say something along the lines of
“If a class has the () operator, see if you can inline that method”
But that too is too specific to C++ and I’m afraid high-level operator semantics will be lost by the time it turns to byte code. Seems to me, the sane solution would be for clang++ to treat std::function as an LLVM function type (https://llvm.org/docs/LangRef.html#function-type <https://llvm.org/docs/LangRef.html#function-type>) instead of a class object and then the road to these optimizations will open. But I have not looked at the gritty details of the clang implementation, so I could be way off. Anybody willing to step in and fill the blanks would be appreciated.
Regards,
Lef
> On May 29, 2018, at 2:53 PM, Friedman, Eli <efriedma at codeaurora.org> wrote:
>
> On 5/29/2018 10:52 AM, Eleftherios Ioannidis via llvm-dev wrote:
>> However that doesn't seem to be the case, does the inliner not get triggered if the functions are passed as objects (std::function) or am I using the wrong `opt` invokation?
>
> In general, the inliner can only inline direct function calls (not virtual calls, or calls through a function pointer or std::function); otherwise, it doesn't know what to inline.
>
> In some cases, optimizations can prove that an indirect call actually calls some specific function, but your testcase isn't one of those cases. In particular, the implementation of std::function is kind of hard for the optimizer to deal with. This could probably be improved.
>
> -Eli
>
> --
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180529/52d65f6f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 1854 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180529/52d65f6f/attachment.bin>
More information about the llvm-dev
mailing list