I have recently put together a set of slides about LIL (Low-level Intermediate Language) and gave a talk at Microsoft. This work was done before I joined Microsoft: LIL was developed by the ORP (Open Runtime Platform) team at Intel. LIL was addressing multiple issues in the ORP design (papers referenced below can give you an idea) but the focus of this presentation was more narrow: how to improve the interface between the JIT (Just-In-Time compiler) and the rest of the VM. I'd like to point out that I use the terms VM (Virtual Machine) and EE (Execution Engine) interchangeably (see this post for a discussion of this terminology). Others have come up independently with somewhat similar ideas and I found quite a lot of interest in the LIL approach in conversations both inside and outside of Microsoft. For my current presentation I took some of the old LIL slides that I used in a talk I gave at ETH Zürich in 2003 and modified them to focus on the JIT/EE interface. This version of slides benefited from my conversations with many people in the last year, after the original LIL papers were published. I think that I owe most to my conversations with George Bosworth and to comments by Thorsten Brunklaus who worked on the SEAM VM (see below) and now is in the CLR team.
LIL is described at length in the VM'04 paper. The MPOOL'03 paper (pdf) presents some thoughts on how LIL could be used to abstract away the object model from the JIT. Full references to these two papers are available on my publications page.
The talk I just gave had the title "Execution Engine-independent JIT compilers" and the basic idea is that LIL enables a much better abstraction of the EE from a JIT's point of view then what is used in all known to me implementations of virtual machines for JVM and CLR/CLI. I made the full presentation available as a pdf file.
Here are references to the related work mentioned in the slides: