The structure of an optimizing compiler String of

  • Slides: 6
Download presentation
The structure of an optimizing compiler String of characters Lexical analyzer String of tokens

The structure of an optimizing compiler String of characters Lexical analyzer String of tokens Parser Parse tree Semantic analyzer Parse tree Intermediate-code generator Medium-level intermediate code Optimizer Medium-level intermediate code Code Generator Low-level intermediate code Postpass optimizer Relocatable object module or runable machine code

Source and high-level optimizations A A B C 1 C 2 C 5 C

Source and high-level optimizations A A B C 1 C 2 C 5 C 3 C 4 D E Scalar replacement of array references Data-cache optimization

High and mid-level optimization B A B C 1 C 2 C 5 C

High and mid-level optimization B A B C 1 C 2 C 5 C 3 C 4 D E Procedure integration Tail-call optimization, including tail-recursion elimination Scalar replacement of aggregates Sparse conditional constant propagation Interprocedural constant propagation Procedure specialization and cloning Sparse conditional constant propagation

Medium and low-level optimizations A C 1 Global value numbering Local and global copy

Medium and low-level optimizations A C 1 Global value numbering Local and global copy propagation Sparse conditional constant propagation Dead-code elimination C 2 Local and global common sub-expression elimination Loop-invariant code motion C 3 Partial-redundancy elimination C 4 Dead-code elimination Code hoisting Induction-variable strength reduction Linear-function test replacement Induction-variable removal Unnecessary bounds-checking elimination Control-flow optimizations C 5 Constant folding Algebraic simplifications, including reaasociation B C 1 C 2 C 5 C 3 C 4 D E

Low-level (machine dependent) optimizations D A B C 1 C 2 C 5 C

Low-level (machine dependent) optimizations D A B C 1 C 2 C 5 C 3 C 4 D E In-line expansion Leaf-routine optimization Shrink wrapping Machine idioms Tail merging Branch optimizations and conditional moves Dead-code elimination Software pipelining, with loop unrolling, variable expansion, register renaming, and hierarchical reduction Basic-block and branch scheduling 1 Register allocation by graph coloring Basic-block and branch scheduling 2 Intraprocedural I-cache optimization Instruction prefetching Data prefetching Branch prediction

Link-time optimizations E A B C 1 C 2 C 5 C 3 C

Link-time optimizations E A B C 1 C 2 C 5 C 3 C 4 D E Interprocedural register allocation Aggregation of global references Interprocedural I-cache optimization