![Page 1: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/1.jpg)
7. Code Generation
Chih-Hung Wang
Compilers
References1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010.2. D. Grune, H. Bal, C. Jacobs, and K. Langendoen. Modern Compiler Design. John Wiley & Sons, 2000.3. Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1986. (2nd Ed. 2006)1
![Page 2: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/2.jpg)
2
Overview
![Page 3: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/3.jpg)
3
InterpretationAn interpreter is a program that consider
the nodes of the AST in the correct order and performs the actions prescribed for those nodes by the semantics of the language.
Two varietiesRecursiveIterative
![Page 4: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/4.jpg)
4
InterpretationRecursive interpretation
operates directly on the AST [attribute grammar]
simple to writethorough error checksvery slow: 1000x speed of compiled code
Iterative interpretationoperates on intermediate code
good error checkingslow: 100x speed of compiled code
![Page 5: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/5.jpg)
5
Recursive Interpretation
![Page 6: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/6.jpg)
6
Self-identifying datamust handle user-defined data typesvalue = pointer to type descriptor +
array of subvalues
example: complex number
re: 3.0
im: 4.0
![Page 7: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/7.jpg)
7
Complex number representation
![Page 8: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/8.jpg)
8
Iterative interpretation
Operates on threaded AST
Active node pointer
Flat loop over a case statement
IF
condition THEN ELSE
FI
![Page 9: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/9.jpg)
9
Sketch of the main loop
![Page 10: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/10.jpg)
10
Example for demo compiler
![Page 11: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/11.jpg)
11
Code GenerationCompilation produces object code from the
intermediate code tree through a process called code generation
Tree rewritingReplace nodes and subtrees of the AST by
target code segmentsProduce a linear sequence of instructions
from the rewritten AST
![Page 12: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/12.jpg)
12
Example of code generationa:=(b[4*c+d]*2)+9;
![Page 13: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/13.jpg)
13
Machine instructionsLoad_Addr M[Ri], C, Rd
Loads the address of the Ri-th element of the array at M into Rd, where the size of the elements of M is C bytes
Load_Byte (M+Ro)[Ri], C, RdLoads the byte contents of the Ri-th element
of the array at M plus offset Ro into Rd, where the other parameters have the same meanings as above
![Page 14: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/14.jpg)
14
Two sample instructions with their ASTs
![Page 15: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/15.jpg)
15
Code generationMain issues:Code selection – which template?Register allocation – too few!Instruction ordering
Optimal code generation is NP-completeConsider small parts of the ASTSimplify target machineUse conventions
![Page 16: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/16.jpg)
16
Object code sequence Load_Byte (b+Rd)[Rc], 4, RtLoad_Addr 9[Rt], 2, Ra
![Page 17: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/17.jpg)
17
Trivial code generation
![Page 18: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/18.jpg)
18
Code for (7*(1+5))
![Page 19: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/19.jpg)
19
Partial evaluation
![Page 20: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/20.jpg)
20
New Code
![Page 21: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/21.jpg)
21
Simple code generationConsider one AST node at a time
Two simplistic target machinesPure register machinePure stack machine
BP
SP
stack
frame
vars
![Page 22: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/22.jpg)
22
Pure stack machineInstructions
![Page 23: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/23.jpg)
23
Example of p:=p+5Push_Local #pPush_Const 5Add_Top2Store_Local #p
![Page 24: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/24.jpg)
24
Pure register machineInstructions
![Page 25: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/25.jpg)
25
Example of p:=p+5Load_Mem p, R1Load_Const 5, R2Add_Reg R2, R1Store_Reg R1, p
![Page 26: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/26.jpg)
26
Simple code generation for a stack machineThe AST for b*b – 4 *(a*c)
![Page 27: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/27.jpg)
27
The ASTs for the stack machine instructions
![Page 28: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/28.jpg)
28
The AST for b*b - 4*(a*c) rewritten
![Page 29: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/29.jpg)
29
Simple code generationfor a stack machine (demo)example: b*b – 4*a*cthreaded AST
-
* *
*b b
a c
4
![Page 30: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/30.jpg)
30
Simple code generationfor a stack machine (demo)example: b*b – 4*a*cthreaded AST
-
* *
*b b
a c
4
Sub_Top2
Mul_Top2 Mul_Top2
Mul_Top2Push_Local #b Push_Local #b
Push_Local #a Push_Local #c
Push_Const 4
![Page 31: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/31.jpg)
31
Simple code generationfor a stack machine (demo)
example: b*b – 4*a*crewritten AST
-
* *
*b b
a c
4
Sub_Top2
Mul_Top2 Mul_Top2
Mul_Top2Push_Local #b Push_Local #b
Push_Local #a Push_Local #c
Push_Const 4
Push_Local #b
Push_Local #b
Mul_Top2
Push_Const 4
Push_Local #a
Push_Local #c
Mul_Top2
Mul_Top2
Sub_Top2
![Page 32: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/32.jpg)
32
Depth-first code generation
![Page 33: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/33.jpg)
33
Stack configurations
![Page 34: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/34.jpg)
34
Simple code generation for a register machineThe ASTs for the register machine
instructions
![Page 35: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/35.jpg)
35
Code generation with register allocation
![Page 36: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/36.jpg)
36
Code generation with register numbering
![Page 37: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/37.jpg)
37
Register machine code for b*b - 4*(a*c)
![Page 38: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/38.jpg)
38
Register contents
![Page 39: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/39.jpg)
39
Weighted register allocationIt is advantageous to generate the code for
the child that requires the most registers first
Weight:The number of registers required by a node
![Page 40: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/40.jpg)
40
Register weight of a node
![Page 41: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/41.jpg)
41
AST for b*b-4*(a*c) with register weights
![Page 42: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/42.jpg)
42
Weighted register machine code
![Page 43: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/43.jpg)
43
ExampleParameter number N 2 3 1Stored weight 4 2 1Registers occupied when 0 1 2 starting parameter NMaximum per parameter 4 3 3Overall maximum 4
![Page 44: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/44.jpg)
44
Example: Tree representation
![Page 45: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/45.jpg)
45
Register spilling
Too few registers?Spill registers in memory, to be
retrieved laterHeuristic: select subtree that uses all
registers, and replace it by a temporary
example: b*b – 4*a*c2 registers 1
2
11
11
3
2
2
2-
* *
*b b
a c
4
T11
![Page 46: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/46.jpg)
46
1
2
11
11
3
2
2
2-
* *
*b b
a c
4
T11
Register spilling
Load_Mem b, R1
Load_Mem b, R2
Mul_Reg R2, R1
Store_Mem R1, T1
Load_Mem a, R1
Load_Mem c, R2
Mul_Reg R2, R1
Load_Const 4, R2
Mul_Reg R1, R2
Load_Mem T1, R1
Sub_Reg R2, R1
![Page 47: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/47.jpg)
47
Another example
1
2
11
3
2
2
2-
* *
*b b
a c
4
T1
1
![Page 48: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/48.jpg)
48
Algorithm
![Page 49: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/49.jpg)
49
Machines with register-memory operationsAn instruction:
Add_Mem X, R1Adding the contents of memory location X to
R1
![Page 50: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/50.jpg)
50
Register-weighted tree for a memory-register machine
![Page 51: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/51.jpg)
51
Code generation for basic blocksFinding the optimal rewriting of the AST
with available instruction templates is NP-complete.
Three techniquesBasic blocksBottom-up tree rewritingRegister allocation by graph coloring
![Page 52: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/52.jpg)
52
Basic blockImprove quality of code emitted by
simple code generationConsider multiple AST nodes at a time
Generate code for maximal basic blocks that cannot be extended by including adjacent AST nodes
basic block: a part of the control graph that
contains no splits (jumps) or combines (labels)
![Page 53: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/53.jpg)
53
Example of basic blockA basic block consists of expressions and
assignments
Fixed sequence (;) limits code generationAn AST is too restrictive
![Page 54: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/54.jpg)
54
From AST to dependency graphAST for the simple basic block
![Page 55: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/55.jpg)
55
Simple algorithm to convert AST to a data dependency graphReplace arcs by downwards arrows
(upwards for destination under assignment)
Insert data dependencies from use of V to preceding assignment to V
Insert data dependencies from the assignment to a variable V to the previous assignment to V
Add roots to the graph (output variables)Remove ;-nodes and connecting arrows
![Page 56: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/56.jpg)
56
Simple data dependency graph
![Page 57: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/57.jpg)
57
Cleaned-up graph
![Page 58: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/58.jpg)
58
Exercise
{ int n;
n = a+1;
x = (b+c) * n;
n = n+1;
y = (b+c) * n;
}
Convert the above codes to a data dependency graph
![Page 59: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/59.jpg)
59
Answer
+
b c a
+
1
*
x
+ +
1
*
y
![Page 60: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/60.jpg)
60
Common subexpression eliminationSimple example
x=a*a+2*a*b + b*b;y=a*a-2*a*b + b*b;Three common subxpressionsdouble quads = a*a + b*b;double cross_prod = 2*a*b;x = quads + cross_prod;y = quads – cross_prod;
![Page 61: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/61.jpg)
61
Common subexpressionEqual subexpression in a basic block are
not necessarily common subexpressions
x=a*a+2*a*b + b*b;a=b=0;y=a*a-2*a*b + b*b;
![Page 62: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/62.jpg)
62
Common subexpression example (1/3)
![Page 63: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/63.jpg)
63
Common subexpression example (2/3)
![Page 64: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/64.jpg)
64
Common subexpression example (3/3)
![Page 65: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/65.jpg)
65
From dependency graph to codeRewrite nodes with machine instruction
templates, and linearize the resultInstruction ordering: ladder sequencesRegister allocation: graph coloring
![Page 66: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/66.jpg)
66
Linearization of thedata dependency graph
Example:
(a+b)*c – d
Definition of a ladder sequenceEach root node is a ladder sequence A ladder sequence S ending in operator
node N can be extended with the left operand of N
If operator N is commutative then S may also extended with the right operand of N
Load_Mem a, R1
Add_Mem b, R1
Mul_Mem, c, R1
Sub_Mem d, R1
![Page 67: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/67.jpg)
67
Code generated for a given ladder sequence
load_Mem b, R1 Add_Reg I1, R1 Add_Mem c, R1 Store_Reg R1, x
![Page 68: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/68.jpg)
68
Heuristic ordering algorithmTo delay the issues of register allocation,
use pseudo-registers during the linearization
•Select ladder sequence S without more than one incoming dependencies
•Introduce temporary (pseudo-) registers for non-leaf operands, which become additional roots
•Generate code for S, using R1 as the ladder register
•Remove S from the graph
•Repeat step 1 through 4 until the entire data dependency graph has been consumed and rewritten to code
![Page 69: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/69.jpg)
69
Example of linearization
X1
![Page 70: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/70.jpg)
70
The code for y, *, +Load_Reg X1, R1Add_Const 1, R1Multi_Mem d, R1Store_Reg R1, y
![Page 71: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/71.jpg)
71
Remove the ladder sequence y, *, +
![Page 72: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/72.jpg)
72
The code for x, +, +, *Load_Reg X1, R1Mult_Reg X1, R1Add_Mem b, R1Add_Mem c, R1Store_Reg R1, x
![Page 73: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/73.jpg)
73
The Last stepLoad_Mem a, R1Add_Const 1, R1Load_Reg R1, X1
![Page 74: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/74.jpg)
74
The results of code generation
![Page 75: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/75.jpg)
75
Exercise
Generate code for the following dependency graph
*
2
*
+
+
x
-
+
y
*
a
*
b
![Page 76: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/76.jpg)
76
Answers
*
2
*
+
+
x
-
+
y
*
a
*
b
Load_Reg R2, R1
Add_Reg R3, R1
Add_Reg, R4, R1
Store_Mem R1, x
1) ladder: x, +, +
Load_Reg R2, R1
Sub_Reg R3, R1
Add_Reg, R4, R1
Store_Mem R1, y
2) ladder: y, +, -
R2R3
R4
Load_Const 2, R1
Mul_Reg Ra, R1
Mul_Reg, Rb, R1
Load_Reg R1, R3
3) ladder: R3, *, *
Load_Reg Ra, R1
Mul_Reg Ra, R1
Load_Reg R1, R2
4) ladder: R2, *
Load_Reg Rb, R1
Mul_Reg Rb, R1
Load_Reg R1, R4
5) ladder: R4, *
![Page 77: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/77.jpg)
77
Register allocation for the linearized codeMap the pseudo-registers to memory
locations or real registers
gcc compiler
![Page 78: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/78.jpg)
78
Code optimization in the presence of pointersPointers cause two different problems
for the dependency grapha=x * y;*p = 3;b = x * y;
a=*p * y;b = 3;c = *p * q;
x * y is not a common subexpression if p happens to point to x or y
*p * q is not a common subexpression if p happens to point to b
![Page 79: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/79.jpg)
79
Example (1/4)Assignment under a pointer
![Page 80: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/80.jpg)
80
Example (2/4)
Data dependency graph with an assignment under a pointer
![Page 81: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/81.jpg)
81
Example (3/4)
Cleaned-up graph
![Page 82: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/82.jpg)
82
Example (4/4)
Target code
*x:=R1
![Page 83: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/83.jpg)
83
BURS code generationIn practice, machines often have a great
variety of instructions, simple ones and complicated ones, and better code can be generated if all available instructions are utilized.
Machines often have several hundred different machine instructions, often each with ten or more addressing modes, and it would be very advantages if code generators for such machines could be derived from a concise machine description rather than written by hand.
![Page 84: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/84.jpg)
84
BURS code generationSimple instruction patterns (1/2)
![Page 85: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/85.jpg)
85
BURS code generationSimple instruction patterns (2/2)
![Page 86: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/86.jpg)
86
Example: Input tree
![Page 87: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/87.jpg)
87
Naïve rewrite Its cost is 17 units
1 + 3 + 4 + 1 + 4 + 3 + 1 = 17
![Page 88: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/88.jpg)
88
Code resulting
![Page 89: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/89.jpg)
89
Top-down largest-fit rewrite
![Page 90: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/90.jpg)
90
DiscussionsHow do we find all possible rewrites, and
how do we represent them? It will be clear that we do not fancy listing them all!!
How do we find the best/cheapest rewrite among all possibilities, preferably in time linear in the size of the expression to be translated.
![Page 91: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/91.jpg)
91
Bottom-up pattern matchingThe dotted trees
![Page 92: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/92.jpg)
92
Outline code for bottom-up pattern matching
![Page 93: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/93.jpg)
93
Label set resulting
![Page 94: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/94.jpg)
94
Instruction selection by dynamic programmingBottom-up pattern matching with costs
#5->reg#6->reg#7.1#8.1
Instructionsselection
![Page 95: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/95.jpg)
95
Cost evaluationLower *
#5->reg@7#6->reg@8 (1+3+4)
Higher *#6->reg@12 (1+7+4)#8->reg@9 (1+3+5)
Top + (?)Exercise
![Page 96: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/96.jpg)
96
Code generation by bottom-up matching
![Page 97: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/97.jpg)
97
Code generation by bottom-up matching, using commutativity
![Page 98: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/98.jpg)
98
Pattern matching and instruction selection combinedTwo basic operands
State S1: -> cst@0 #1->reg@1State S2: -> mem@0 #2->reg@3
![Page 99: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/99.jpg)
99
States of the BURS
![Page 100: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/100.jpg)
100
Creating the cost-conscious next-state tableThe triplet {‘+’, S1, S1}=S3
S3:#4->reg@3 (1+1+1)
{‘+’, S1, S2} = S5S5:
#3->reg@1+0+3=4#4->reg@1+3+1=5
Exercise: {‘+’, S1, S5}Exercise: {‘*’, S1, S2}
–#5->reg@1+0+6=7 (4)–#6->reg@1+3+4=8–#7.1@0+3+0=3 (0)–#8.1@0+3+0=3 (0)
![Page 101: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/101.jpg)
101
Cost conscious next table
![Page 102: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/102.jpg)
102
Code generation using cost-conscious next-state table
![Page 103: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/103.jpg)
103
Register allocation by graph coloringProcedure-wide register allocationOnly live variables require register storage
Two variables(values) interfere when their live ranges overlap
dataflow analysis: a variable is live at node N if the value it holds is used on some path further down the control-flow graph; otherwise it is dead
![Page 104: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/104.jpg)
104
A program segment for live analysis
![Page 105: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/105.jpg)
105
Live range of the variables
![Page 106: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/106.jpg)
106
Graph coloringNP complete problem
Heuristic: color easy nodes lastFind node N with lowest degreeRemove N from the graphColor the simplified graph Set color of N to the first color that is
not used by any of N’s neighbors
![Page 107: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/107.jpg)
107
Coloring process
3 registers
![Page 108: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/108.jpg)
108
Preprocessing the intermediate codePreprocessing of expressions
char lower_case_from_capital(char ch) { return ch + (‘a’ – ‘A’); }Constant expression evaluation char lower_case_from_capital(char ch) { return ch + 32; }
![Page 109: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/109.jpg)
109
Arithmetic simplificationTransformations that replace an operation
by a simpler one are called strength reductions.
Operations that can be removed completely are called null sequences.
![Page 110: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/110.jpg)
110
Some transformations for arithmetic simplification
![Page 111: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/111.jpg)
111
Preprocessing of if-statements and goto statementsWhen the condition in an if-then-else
statement turns out to be constant, we can delete the code of the branch that will never be executed. This process is called dead code elimination.
If a goto or return statement is followed by code that has no incoming data flow, that code is dead and can be eliminated.
![Page 112: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/112.jpg)
112
Stack representations
![Page 113: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/113.jpg)
113
Stack representations (details)
condition
IF
THEN ELSE
>
y 0yx
5
yx
5
5
yx
5
50
yx
5
T
yx
5
yx
5
yx
5
x = 7;
yx
57
yx
5
dead
code
FI
merge
![Page 114: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/114.jpg)
114
Preprocessing of routinesIn-lining method
![Page 115: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/115.jpg)
115
In-lining result
Advanced examples:{int n=3; printf(“square=%d\n”, n*n);}=> {int n=3; printf(“square=%d\n”, 3*3);}=> {int n=3; printf(“square=%d\n”, 9);}
Load_par “square=%d\n”Load_par 9Call printf
![Page 116: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/116.jpg)
116
CloningExample
double poewr_series(int n, double a[], double x) { int p; for (p=0; p<n; p++) result += a[p] * (x**p); return result }
Is called with x set to 1.0
double poewr_series(int n, double a[]) { int p; for (p=0; p<n; p++) result += a[p] * (1.0**p); return result }
double poewr_series(int n, double a[]) { int p; for (p=0; p<n; p++) result += a[p] ; return result }
![Page 117: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/117.jpg)
117
Postprocessing the target codeStupid instruction sequences
Load_Reg R1, R2Load_Reg R2, R1orStore_Reg R1, nLoad_Mem n, R1
![Page 118: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/118.jpg)
118
Creating replacement patternsExample
Load_Reg Ra, Rb; Load_Reg Rc, Rd |Ra=Rd, Rb=Rc => Load_Reg Ra, Rb
Load_const 1, Ra; Add_Reg Rb, Rc |Ra=Rb, is_last_use(Rb) => Increment Rc
![Page 119: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/119.jpg)
119
Locating and replacing instructionsMultiple pattern matchingUsing FSADotted items
![Page 120: 7. Code Generation Chih-Hung Wang Compilers References 1. C. N. Fischer, R. K. Cytron and R. J. LeBlanc. Crafting a Compiler. Pearson Education Inc., 2010](https://reader031.vdocuments.us/reader031/viewer/2022020921/5697bfe11a28abf838cb3e51/html5/thumbnails/120.jpg)
120
HomeworkStudy sections
4.2.13 Machine code generation4.3 Assemblers, linkers and loaders