File compilation is allowed to automatically inline function calls that are in the same compilation unit as their target.
This follows from the reasoning that material which is compiled together will be loaded together, and those functions will be redefined together.
The details are in 3.2.2.3 Semantic Constraints, bullets 3-5.
In any case where this inlining would be a problem, you must use declaim globally or declare locally to request notinline.
Likewise, you can use an inline declaration to encourage inlining.
Allegro CL does inlining on its own, IIRC.
> majority of users would find this behavior problematic as default
Block compilation or whole program compilation are used for delivery of applications.
Mostly, sure just like LTO in C/C++. But if I were doing any scientific programming with common lisp I'd try to use block compilation in a few select places during interactive development as well. I'd imagine that for some code this would get rid of a lot of boxing and unboxing as well as type checks, in addition to getting rid of indirection. I'd not be surprised if you could get an integer factor speed up if you got many small functions which mostly operate on doubles or double arrays. I should probably give it a try just to satisfy my curiosity.