Alain Frisch wrote: >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. > > > This qualifies as an optimization opportunity- turning a call to caml_apply into a direct function call is an optimization. Which may open up other optimization possibilities. But that was my point- if the only thing you're getting out of inlining a function is skipping a function call (to a known location), then inlining generally isn't worth it- it's only worth it if it opens up other possibilities. Brian