Intermediate representation

[1] An IR may take one of several forms: an in-memory data structure, or a special tuple- or stack-based code readable by the program.

For example, the CPython interpreter transforms the linear human-readable text representing a program into an intermediate graph structure that allows flow analysis and re-arrangement before execution.

The term comes from their use in compilers, where the source code of a program is translated into a form more suitable for code-improving transformations before being used to generate object or machine code for a target machine.

Among these languages are GCC supports generating these IRs, as a final target: The LLVM compiler framework is based on the LLVM IR intermediate language, of which the compact, binary serialized representation is also referred to as "bitcode" and has been productized by Apple.

It uses the intermediate languages ESIL[9] and REIL[10] to analyze binary files.