Brian Hurt wrote:
where the function is only called from one place, or 3) where inlining
opened up signifigant other optimization opportunities. The classic
example for Ocaml here is replacing a call to Pervasives.compare with an
integer compare. Most of the rest of the time, inlining is either a
break even proposition, or often a loss.
Another good situation is when inlining allows the compiler to turn a
function call to an unknown location into a direct function call (or no
function call at all). This happens as soon as you write "List.map (fun
x -> ...)". Inlining List.map would avoid the allocation of the closure
and a computed call (and then the local abstraction will also be inlined
in the body of the inlined List.map because it is used only once).
Currently, OCaml never inlines recursive functions.