Ablego: a function outlining and partial inlining framework
Peng Zhao, José Nelson Amaral · Software Practice and Experience · 2006
Abstract Frequently invoked large functions are common in non‐numeric applications. These large functions present challenges to modern compilers not only because they require more time and resources at compilation time, but also because they may prevent optimizations such as function inlining. Often large portions of the code in a hot functionfhostare executed much less frequently thanfhostitself. Partial inlining is a natural solution to the problems caused by includingcoldcode segments that are seldom executed intohotfunctions that are frequently invoked. When applying partial inlining, a compileroutlinescold statements from a hot functionfhost. After outlining,fhostbecomes smaller and thus can be easily inlined. This paper presentsAblego, a framework for function outlining and partial inlining that includes several innovations: (1) an abstract‐syntax‐tree‐based analysis and transformation to form cold regions for outlining; (2) a set of flexible heuristics to control the aggressiveness of function outlining; (3) several possible function outlining strategies; (4)explicit variable spilling, a new technique that overcomes negative side‐effects of function outlining. With the proper strategy, partial inlining improves performance by up to 5.75%. A performance study also suggests that partial inlining's effect on enabling more aggressive inlining is limited. The performance improvement from partial inlining actually comes from better code placement and better code generation. Copyright © 2006 John Wiley & Sons, Ltd.