IL, also known as Microsoft Intermediate Language,
This is certainly not a new concept, Intermediate Representation (IR) has been used for a long time. Its very useful. Firstly if you wish to port your compiler onto a new platform, you just need to port the bit that deals with the IR. Secondly, you can have multiple tools to compile multiple languages into IR, and then just one tool to compile this onto a specific architecture. It also makes creating cross compilers convenient. Theres plenty of compilers that use C as an intermediate language (i.e. translate into C, then allow a C compiler to generate machine code.) Java bytecode can be thought of as an intermediate language too.
Internally GCC uses a number of different IR/ILs to get the job done.