Inline the callee of CB into its caller's basic block.

Synopsis

Declared in <llvm/Transforms/Utils/Cloning.h>

InlineResult
InlineFunction(
    CallBase& CB,
    InlineFunctionInfo& IFI,
    bool MergeAttributes = false,
    AAResults* CalleeAAR = nullptr,
    bool InsertLifetime = true,
    bool TrackInlineHistory = false,
    Function* ForwardVarArgsTo = nullptr,
    OptimizationRemarkEmitter* ORE = nullptr);

Description

This function inlines the called function into the basic block of the caller. This returns false if it is not possible to inline this call. The program is still in a well defined state if this occurs though.

Note that this only does one level of inlining. For example, if the instruction 'call B' is inlined, and 'B' calls 'C', then the call to 'C' now exists in the instruction stream. Similarly this will inline a recursive function by one level.

Note that while this routine is allowed to cleanup and optimize the inlined code to minimize the actual inserted code, it must not delete code in the caller as users of this routine may have pointers to instructions in the caller that need to remain stable.

If ForwardVarArgsTo is passed, inlining a function with varargs is allowed and all varargs at the callsite will be passed to any calls to ForwardVarArgsTo. The caller of InlineFunction has to make sure any varargs are only used by ForwardVarArgsTo.

The callee's function attributes are merged into the callers' if MergeAttributes is set to true.

Return Value

Success if the call was inlined, otherwise a failure reason.

Parameters

Name

Description

CB

Call site whose callee should be inlined.

IFI

Inlining context and result collector.

MergeAttributes

Whether to merge callee attributes into the caller.

CalleeAAR

Optional alias‐analysis results for the callee.

InsertLifetime

Whether to insert lifetime markers for inlined allocas.

TrackInlineHistory

Whether to record inline history metadata.

ForwardVarArgsTo

If set, forward varargs from the callsite to calls to this function.

ORE

Optional optimization‐remark emitter for diagnostics.

Created with MrDocs