Currently we use inlining to expand runtime services as well as in BC2IR. The expansion in runtime services is often expanding similar operations. For example, the expansion of runtime services for the method Object.toString in the production compiler makes 134 inline decisions. In contrast BC2IR for the same method makes 43 inlining decisions. Part of the reason for this cost are the improvements to the modularity of the runtime and GC systems. It would be nice if we could reuse cached translations of the runtime services to reduce the cost of their expansion into the IR. Problems with exception handling and parameter passing/constant propagation would need dealing with. Possibly the cached translations would have different versions for particular constant arguments.