320 likes | 445 Views
Code Generation. Mooly Sagiv html://www.cs.tau.ac.il/~msagiv/courses/wcc03.html. Chapter 4.2. Basic Compiler Phases. Code generation issues. Code selection Register allocation Instruction ordering. Simplifications. Consider small parts of AST at time One expression at the time
E N D
Code Generation Mooly Sagiv html://www.cs.tau.ac.il/~msagiv/courses/wcc03.html Chapter 4.2
Code generation issues • Code selection • Register allocation • Instruction ordering
Simplifications • Consider small parts of AST at time • One expression at the time • Target machine simplifications • Ignore certain instructions • Use simplifying conventions
Outline • Partial evaluation in the nutshell • Simple code generation for expressions (4.2.4) • Pure stack machine • Pure register machine • Code generation of basic blocks (4.2.5) • Automatic generation of code generators (4.2.6) • Register Allocation by Graph Coloring (4.2.7) Next week
Partial Evaluator Program’ Program Input 1 Input 2 Partial Evaluation • Partially interpret static parts in a program • Generates an equivalent program
Example int pow4(int n) { return n * n * n *n; } int pow(int n, int e) { if (e==0) return 1; else return n * pow(n, e-1); } e=4
Example2 Bool match(string, regexp) { switch(regexp) { …. } } regexp=a b*
Partial Evaluation Generalizes Compilation Partial Evaluator Program Interpreter AST Program Input
Simple Code Generation • Fixed translation for each node type • Translates one expression at the time • Local decisions only • Works well for simple machine model • Stack machines (PDP 11, VAX) • Register machines (IBM 360/370) • Can be applied to modern machines
Simple Stack Machine SP Stack BP
Example Push_Local #p Push_Const 5 Add_Top2 Store_Local #p p := p + 5
Simple Stack Machine Push_Local #p Push_Const 5 Add_Top2 Store_Local #p SP BP+5 7 BP
Simple Stack Machine Push_Local #p Push_Const 5 Add_Top2 Store_Local #p SP 7 BP+5 7 BP
Simple Stack Machine SP 5 Push_Local #p Push_Const 5 Add_Top2 Store_Local #p 7 BP+5 7 BP
Simple Stack Machine Push_Local #p Push_Const 5 Add_Top2 Store_Local #p SP 12 BP+5 7 BP
Simple Stack Machine Push_Local #p Push_Const 5 Add_Top2 Store_Local #p SP BP+5 12 BP
Register Machine • Fixed set of registers • Load and store from/to memory • Arithmetic operations on register only
Example Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P p := p + 5
Simple Register Machine Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P R1 R2 x770 7 memory
Simple Register Machine 7 Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P R1 R2 x770 7 memory
Simple Register Machine 7 5 Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P R1 R2 x770 7 memory
Simple Register Machine 12 5 Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P R1 R2 x770 7 memory
Simple Register Machine 12 5 Load_Mem p, R1 Load_Const 5, R2 Add_Reg R2, R1 Store_Reg R1, P R1 R2 x770 12 memory
Simple Code Generation for Stack Machine • Tree rewritings • Bottom up AST traversal
Example Subt_Top2 - Mult_Top2 Mult_Top2 * * Mult_Top2 Push_Constant 4 Push_Local #b Push_Local #b b b 4 * a c Push_Local #c Push_Local #a