.
This file is responsible for initialisation, decoding arguments, opening and
closing files, and sequencing the passes.
| Pass |
Description |
Dump |
| Parsing |
Translates C code to a high level tree representation.
Semantic analysis, data type analysis happen here, as well as
function inlining and constant folding. When a complete
function definition has been read, the tree representation is
converted to RTL code. RTL is target dependent
as RTL is generated from available named instruction patterns. |
.rtl |
Sibling call |
Tail recursion elimination, tail and sibling call optimisation. |
.sibling |
| Jump |
Simplifies jumps to the following insn, jumps across jumps,
jumps to jumps |
. |
| SSA passes |
With static single assignment enabled, each pseudo reg is only set once,
enabling more optimisations in linear time. Conditional constant propagation, dead code elimination. |
.ssa*, .ussa |
| Register scan |
Finds first and last use of registers. |
. |
| Jump conversion |
Converts if-then-else forms to conditional assignment. |
. |
| Jump threading |
Detects and optimises conditional jumps that branch to an identical
or inverse test. |
.jump |
| CSE |
Common subexpression elimination and constant propagation. May cause
another jump pass if conditional jumps become unconditional. |
.cse |
| addressof |
Translate any pseudo regs that had their address taken into MEMs. |
.addressof |
| GCSE |
Global common subexpression elimination. Lazy code motion, load and
store motion. Global constant propagation. |
.gcse |