toplev.c
.
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 |