Modern computer programs are typically written in a high-level programming language. A high-level programming language allows data structures and algorithms in a computer program to be expressed in a form that can be easily read and understood by a human programmer. A special software tool, called a “compiler,” can translate a computer program written in a high-level programming language into a set of low-level machine instructions that can be executed by a computer's microprocessor. In the context of this translation, the program written in the high-level programming language is called the “source code.” The set of low-level machine instructions is called “object code.” In practice, a program typically includes multiple source code files from which a number of object files can be derived. These multiple object files and various libraries that include standard routines can be linked (i.e., combined) by a “linker” to create a single executable program. The executable program can then be executed on a computer.
As modern computer programs grow larger and more complex, the sequencing and placement of machine instructions in an executable program greatly affect the efficiency and speed of the program's execution. Modern compilers often include various optimization options that users can selectively enable during program compilation to produce better performing object code. The scope of code optimization can be intra-procedural (i.e., within a single procedure or code block) or inter-procedural (i.e., across multiple procedures or even multiple source code files). Common optimization techniques include loop optimization, data flow optimization, dead code elimination, inline expansion, constant propagation, and so on.