• Review:

advertisement
• Review:
– What is an activation record?
– What are the typical fields in an activation record?
– What are the storage allocation strategies?
• Which program construct in C prevents the compiler from
using the static allocation scheme?
– What do we do in a calling sequence? In a return
sequence?
– Accessing nonlocal variables, is it a problem in static
allocation scheme?
– Accessing nonlocal variables, how to do it in the stack
allocation scheme?
• What is the difference with and without nested loop?
• How to access the non-locals with access link, how to maintain
the access link.
• Chapter 8: Intermediate Code Generation
• Generating machine-independent intermediate form.
– Decouple backend from frontend, facilitate retargeting
– Machine independent code optimizer can be applied here.
• Position of intermediate code generator:
parser
Static
checker
Intermediate
Code
generator
Code
optimizer
Code
generator
• Intermediate Languages:
– Graphical representations:
•
•
•
•
•
Syntax tree
Control flow graph
Program dependence graph (PDG)
DAG (direct acyclic graph)
Example: a := b* -c + b * -c
• Three address code:
• A sequence of statement of the form x:=y op z
• Example: a:=b*-c + b * -c
t1 := -c
t2 := b * t1
t3 := -c
t4 := b * t3
t5 = t2 + t4
a = t5
t1 := -c
t2 := b * t1
t3 = t2 + t2
a = t3
• Three address statements are very close to the
assembly statements (OP src1 src2 dst)
• Some three-address statements that will be used
later:
– Assignment statements:
• With a binary operation:
• With a unary operation:
• With no operation(copy) :
x := y op z
x:= op y
x := y
– Branch statements
• Unconditional jump:
• Conditional jumps:
goto L
if x relop y goto L
– Statement for procedure calls
• Param x, set a parameter for a procedure call
• Call p, n call procedure p with n parameters
• Return y return from a procedure with return value y
– Example: instructions for procedure call: p(x1,
x2, x3, …, xn):
param x1
param x2
…
param xn
call p, n
– Indexed assignments:
• x := y[i] and x[i] := y
– Address and pointer assignments
• x := &y, x := *y
• How to choose an intermediate language to
be used by the compiler?
Download