[cfe-dev] How to inline a C-function during code generation ?

David Blaikie dblaikie at gmail.com
Tue May 26 09:57:58 PDT 2015

On Mon, May 25, 2015 at 11:05 AM, Nat! <nat at mulle-kybernetik.com> wrote:

> Hi
> I started hacking on clang itself and I have some questions, that I
> couldn't figure out with the help of the source code or the documentation.
> Looking at the IR code generated by -O2 and -O0 it seems, that function
> inlining is done in clang already. But I haven't figured out, how that is
> actually done.

Here's some useful terminology for this discussion:

IRGen: Clang's generation of LLVM IR from Clang ASTs
CodeGen: LLVM's generation of machine code/assembly from LLVM IR
Clang: The Clang frontend, down to the point that it generates and passes
LLVM IR to the LLVM libraries.
LLVM: Everything else. (the middle and backend)

Clang does not do inlining.
LLVM does inlining.
Clang produces code that can be/is encouraged to be/is required to be
inlined by LLVM.

For example, if the user writes source code with the always_inline (or is
it "alwaysinline", I forget) attribute, then Clang produces LLVM IR with
the matching attribute and LLVM obeys the request (where possibly) and
inlines all calls to that function during LLVM's optimization passes.

> What I want to do is - during code generation - something to the effect of
> calling "GetOrCreateLLVMFunction" and then doing an "EmitCall", but getting
> the function body inlined instead of a regular call. The function is a
> static inline C function, it has a known name and known argument/return
> types, and it would be an error, if that function is not available at that
> point (or maybe even not declared static inline). GetOrCreateLLVMFunction
> and EmitCall does not seem to do the work for me, as I hoped. The function
> is never inlined, regardless of optimization level. The same function is
> inlined by the compiler itself, with no problem, within the source code
> itself.
> So how can I do that ?
> Ciao
>    Nat!
> ------------------------------------------------------
> Just because nobody understands you
> does not mean you’re an artist. -- DLR
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150526/247ff9e3/attachment.html>

More information about the cfe-dev mailing list