Control inlining of a specific function in generated code
inlining of the current function
in the generated code. Place the
coder.inline directive inside the
function that you want to inline. The code generator does not inline entry-point functions
and recursive functions. Also, the code generator does not inline functions into
parfor loops, or inline functions called from
inlining of the current function in the generated code. Prevent inlining when you want to
simplify the mapping between the MATLAB® source code and the generated code.
If you generate C/C++ code by using the
codegen command or the
Coder™ app, you might have different speed and readability requirements for the
code generated for functions that you write and the code generated for MathWorks® functions. Certain additional global settings enable you to separately
control the inlining behavior for these two parts of the generated code base and at the
boundary between them. See Control Inlining to Fine-Tune Performance and Readability of Generated Code.
coder.inline('default') instructs the code generator to use
internal heuristics to determine whether to inline the current function. Usually, the
heuristics produce highly optimized code. Use
coder.inline explicitly in
your MATLAB functions only when you need to fine-tune these optimizations.
In this example, function
foo is not inlined in the
function y = foo(x) coder.inline('never'); y = x; end
coder.inlinein Control Flow Statements
You can use
coder.inline in control flow code. If
the software detects contradictory
coder.inline directives, the
generated code uses the default inlining heuristic and issues a warning.
Suppose that you want to generate code for a division function that runs on a system
with limited memory. To optimize memory use in the generated code, the
inline_division function manually controls inlining based on
whether it performs scalar division or vector division:
function y = inline_division(dividend, divisor) % For scalar division, inlining produces smaller code % than the function call itself. if isscalar(dividend) && isscalar(divisor) coder.inline('always'); else % Vector division produces a for-loop. % Prohibit inlining to reduce code size. coder.inline('never'); end if any(divisor == 0) error('Cannot divide by 0'); end y = dividend / divisor;
Technique that replaces a function call with the contents (body) of that function. Inlining eliminates the overhead of a function call, but can produce larger C/C++ code. Inlining can create opportunities for further optimization of the generated C/C++ code.