SlideShare a Scribd company logo
UNIT V
Code Optimization &
Code Generation
Mrs.D.Jena Catherine Bel,
Assistant Professor, CSE,
Velammal Engineering College
Position of a Code Generator in
the Compiler Model
2
Front-End
Code
Optimizer
Source
program
Symbol Table
Lexical error
Syntax error
Semantic error
Intermediate
code Code
Generator
Intermediate
code
Target
program
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Code Generation
• Code produced by compiler must be correct
• Source to target program transformation is semantics preserving
• Code produced by compiler should be of high quality
• Effective use of target machine resources
• Heuristic techniques can generate good but suboptimal code,
because generating optimal code is undecidable
3
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Target Program Code
• The back-end code generator of a compiler may generate
different forms of code, depending on the requirements:
• Absolute machine code (executable code)
• Relocatable machine code (object files for linker)
• Assembly language (facilitates debugging)
• Byte code forms for interpreters (e.g. JVM)
4
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
The Target Machine
• Implementing code generation requires
thorough understanding of the target machine
architecture and its instruction set
• Our (hypothetical) machine:
• Byte-addressable (word = 4 bytes)
• Has n general purpose registers R0, R1, …, Rn-1
• Two-address instructions of the form
op source, destination
5
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
The Target Machine: Op-codes
and Address Modes
• Op-codes (op), for example
MOV (move content of source to
destination)
ADD (add content of source to destination)
SUB (subtract content of source from dest.)
6
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
7
Mode
For
m
Address
Added
Cost
Absolute M M 1
Register R R 0
Indexed c(R) c+contents(R) 1
Indirect
register
*R contents(R) 0
Indirect
indexed
*c(R
)
contents(c+contents
(R))
1
Literal #c N/A 1
Address modes
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Instruction Costs
• Machine is a simple, non-super-scalar processor
with fixed instruction costs
• Realistic machines have deep pipelines, I-cache,
D-cache, etc.
• Define the cost of instruction
= 1 + cost(source-mode) + cost(destination-
mode)
8
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Examples
9
Instruction Operation Cost
MOV R0,R1 Store content(R0) into register R1 1
MOV R0,M Store content(R0) into memory location M 2
MOV M,R0 Store content(M) into register R0 2
MOV 4(R0),M Store contents(4+contents(R0)) into M 3
MOV *4(R0),M Store contents(contents(4+contents(R0))) into M 3
MOV #1,R0 Store 1 into R0 2
ADD 4(R0),*12(R1) Add contents(4+contents(R0))
to contents(12+contents(R1)) 3
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Instruction Selection
• Instruction selection is important to obtain
efficient code
• Suppose we translate three-address code
x:=y+z
to: MOV y,R0
ADD z,R0
MOV R0,x
10
a:=a+1 MOV a,R0
ADD #1,R0
MOV R0,a
ADD #1,a INC a
Cost = 6
Cost = 3 Cost = 2
Better Better
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Instruction Selection: Utilizing
Addressing Modes
• Suppose we translate a:=b+c into
MOV b,R0
ADD c,R0
MOV R0,a
• Assuming addresses of a, b, and c are stored in
R0, R1, and R2
MOV *R1,*R0
ADD *R2,*R0
• Assuming R1 and R2 contain values of b and c
ADD R2,R1
MOV R1,a
11
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Need for Global Machine-
Specific Code Optimizations
• Suppose we translate three-address code
x:=y+z
to: MOV y,R0
ADD z,R0
MOV R0,x
• Then, we translate
a:=b+c
d:=a+e
to: MOV a,R0
ADD b,R0
MOV R0,a
MOV a,R0
ADD e,R0
MOV R0,d
12
Redundant
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Register Allocation and
Assignment
• Efficient utilization of the limited set of registers
is important to generate good code
• Registers are assigned by
• Register allocation to select the set of variables that
will reside in registers at a point in the code
• Register assignment to pick the specific register that a
variable will reside in
• Finding an optimal register assignment in general
is NP-complete
13
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Example
14
t:=a+b
t:=t*c
t:=t/d
MOV a,R1
ADD b,R1
MUL c,R1
DIV d,R1
MOV R1,t
t:=a*b
t:=t+a
t:=t/d
MOV a,R0
MOV R0,R1
MUL b,R1
ADD R0,R1
DIV d,R1
MOV R1,t
{ R1=t } { R0=a, R1=t }
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Choice of Evaluation Order
• When instructions are independent, their
evaluation order can be changed
15
t1:=a+b
t2:=c+d
t3:=e*t2
t4:=t1-t3
a+b-(c+d)*e
MOV a,R0
ADD b,R0
MOV R0,t1
MOV c,R1
ADD d,R1
MOV e,R0
MUL R1,R0
MOV t1,R1
SUB R0,R1
MOV R1,t4
t2:=c+d
t3:=e*t2
t1:=a+b
t4:=t1-t3
MOV c,R0
ADD d,R0
MOV e,R1
MUL R0,R1
MOV a,R0
ADD b,R0
SUB R1,R0
MOV R0,t4
reorder
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Flow Graphs
• A flow graph is a graphical depiction of a sequence of
instructions with control flow edges
• A flow graph can be defined at the intermediate code level or
target code level
16
MOV 1,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
MOV 0,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Basic Blocks
• A basic block is a sequence of consecutive instructions with
exactly one entry point and one exit point (with natural flow
or a branch instruction)
17
MOV 1,R0
MOV n,R1
JMP L2
MOV 1,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Basic Blocks and Control Flow
Graphs
• A control flow graph (CFG) is a directed graph with basic
blocks Bi as vertices and with edges BiBj iff Bj can be
executed immediately after Bi
18
MOV 1,R0
MOV n,R1
JMP L2
MOV 1,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Successor and Predecessor
Blocks
• Suppose the CFG has an edge B1B2
• Basic block B1 is a predecessor of B2
• Basic block B2 is a successor of B1
19
MOV 1,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Partition Algorithm for Basic
Blocks
20
Input: A sequence of three-address statements
Output: A list of basic blocks with each three-address statement
in exactly one block
1. Determine the set of leaders, the first statements of basic blocks
a) The first statement is the leader
b) Any statement that is the target of a goto is a leader
c) Any statement that immediately follows a goto is a leader
2. For each leader, its basic block consist of the leader and all
statements up to but not including the next leader or the end
of the program
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Loops
• A loop is a collection of basic blocks, such that
• All blocks in the collection are strongly connected
• The collection has a unique entry, and the only way to reach a
block in the loop is through the entry
21
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Loops (Example)
22
MOV 1,R0
MOV n,R1
JMP L2
L1: MUL 2,R0
SUB 1,R1
L2: JMPNZ R1,L1
B1:
B2:
B3:
L3: ADD 2,R2
SUB 1,R0
JMPNZ R0,L3
B4:
Strongly connected
components:
SCC={{B2,B3},
{B4} }
Entries:
B3, B4
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Equivalence of Basic Blocks
• Two basic blocks are (semantically) equivalent if they compute
the same set of expressions
23
b := 0
t1 := a + b
t2 := c * t1
a := t2
a := c * a
b := 0
a := c*a
b := 0
a := c*a
b := 0
Blocks are equivalent, assuming t1 and t2 are dead: no longer used (no longer live)
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Transformations on Basic
Blocks
• A code-improving transformation is a code
optimization to improve speed or reduce code
size
• Global transformations are performed across
basic blocks
• Local transformations are only performed on
single basic blocks
• Transformations must be safe and preserve the
meaning of the code
• A local transformation is safe if the transformed basic
block is guaranteed to be equivalent to its original
form
24
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Common-Subexpression
Elimination
• Remove redundant computations
25
a := b + c
b := a - d
c := b + c
d := a - d
a := b + c
b := a - d
c := b + c
d := b
t1 := b * c
t2 := a - t1
t3 := b * c
t4 := t2 + t3
t1 := b * c
t2 := a - t1
t4 := t2 + t1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Dead Code Elimination
• Remove unused statements
26
b := a + 1
a := b + c
…
b := a + 1
…
Assuming a is dead (not used)
b := x + y
…
if true goto L2
Remove unreachable code
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Renaming Temporary
Variables
• Temporary variables that are dead at the end of a block can be
safely renamed
27
t1 := b + c
t2 := a - t1
t1 := t1 * d
d := t2 + t1
t1 := b + c
t2 := a - t1
t3 := t1 * d
d := t2 + t3
Normal-form block
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Interchange of Statements
• Independent statements can be reordered
28
t1 := b + c
t2 := a - t1
t3 := t1 * d
d := t2 + t3
t1 := b + c
t3 := t1 * d
t2 := a - t1
d := t2 + t3
Note that normal-form blocks permit all
statement interchanges that are possible
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Algebraic Transformations
• Change arithmetic operations to transform blocks to algebraic
equivalent forms
29
t1 := a - a
t2 := b + t1
t3 := 2 * t2
t1 := 0
t2 := b
t3 := t2 << 1
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Next-Use
• Next-use information is needed for dead-code
elimination and register assignment
• Next-use is computed by a backward scan of a
basic block and performing the following actions
on statement
i: x := y op z
• Add liveness/next-use info on x, y, and z to statement i
• Set x to “not live” and “no next use”
• Set y and z to “live” and the next uses of y and z to i
30
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Next-Use (Step 1)
31
i: a := b + c
j: t := a + b [ live(a) = true, live(b) = true, live(t) = true,
nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ]
Attach current live/next-use information
Because info is empty, assume variables are live
(Data flow analysis Ch.10 can provide accurate information)
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Next-Use (Step 2)
32
i: a := b + c
j: t := a + b [ live(a) = true, live(b) = true, live(t) = true,
nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ]
live(a) = true nextuse(a) = j
live(b) = true nextuse(b) = j
live(t) = false nextuse(t) = none
Compute live/next-use information at j
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Next-Use (Step 3)
33
i: a := b + c
j: t := a + b [ live(a) = true, live(b) = true, live(t) = true,
nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ]
Attach current live/next-use information to i
[ live(a) = true, live(b) = true, live(c) = false,
nextuse(a) = j, nextuse(b) = j, nextuse(c) = none ]
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Next-Use (Step 4)
34
i: a := b + c
j: t := a + b
live(a) = false nextuse(a) = none
live(b) = true nextuse(b) = i
live(c) = true nextuse(c) = i
live(t) = false nextuse(t) = none
[ live(a) = false, live(b) = false, live(t) = false,
nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ]
[ live(a) = true, live(b) = true, live(c) = false,
nextuse(a) = j, nextuse(b) = j, nextuse(c) = none ]
Compute live/next-use information i
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
A Code Generator
• Generates target code for a sequence of three-
address statements using next-use information
• Uses new function getreg to assign registers to
variables
• Computed results are kept in registers as long as
possible, which means:
• Result is needed in another computation
• Register is kept up to a procedure call or end of block
• Checks if operands to three-address code are
available in registers
35
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
The Code Generation
Algorithm
• For each statement x := y op z
1. Set location L = getreg(y, z)
2. If y  L then generate
MOV y’,L
where y’ denotes one of the locations where the
value of y is available (choose register if possible)
3. Generate
OP z’,L
where z’ is one of the locations of z;
Update register/address descriptor of x to include L
4. If y and/or z has no next use and is stored in
register, update register descriptors to remove y
and/or z
36
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Register and Address
Descriptors
• A register descriptor keeps track of what is
currently stored in a register at a particular point
in the code, e.g. a local variable, argument,
global variable, etc.
MOV a,R0 “R0 contains a”
• An address descriptor keeps track of the location
where the current value of the name can be
found at run time, e.g. a register, stack location,
memory address, etc.
MOV a,R0
MOV R0,R1 “a in R0 and R1” 37
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
The getreg Algorithm
• To compute getreg(y,z)
1. If y is stored in a register R and R only holds the
value y, and y has no next use, then return R;
Update address descriptor: value y no longer in R
2. Else, return a new empty register if available
3. Else, find an occupied register R;
Store contents (register spill) by generating
MOV R,M
for every M in address descriptor of y;
Return register R
4. Return a memory location
38
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Code Generation Example
39
Statements Code Generated
Register
Descriptor
Address
Descriptor
t := a - b
u := a - c
v := t + u
d := v + u
MOV a,R0
SUB b,R0
MOV a,R1
SUB c,R1
ADD R1,R0
ADD R1,R0
MOV R0,d
Registers empty
R0 contains t
R0 contains t
R1 contains u
R0 contains v
R1 contains u
R0 contains d
t in R0
t in R0
u in R1
u in R1
v in R0
d in R0
d in R0 and
memory
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Peephole Optimization
• Examines a short sequence of target instructions
in a window (peephole) and replaces the
instructions by a faster and/or shorter sequence
when possible
• Applied to intermediate code or target code
• Typical optimizations:
• Redundant instruction elimination
• Flow-of-control optimizations
• Algebraic simplifications
• Use of machine idioms
40
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Peephole Opt: Eliminating
Redundant Loads and Stores
• Consider
MOV R0,a
MOV a,R0
• The second instruction can be deleted, but only
if it is not labeled with a target label
• Peephole represents sequence of instructions with at
most one entry point
• The first instruction can also be deleted if
live(a)=false
41
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Peephole Optimization:
Deleting Unreachable Code
• Unlabeled blocks can be removed
42
b := x + y
…
goto L2
b := x + y
…
if 0==0 goto L2
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Peephole Optimization: Branch
Chaining
• Shorten chain of branches by modifying target labels
43
b := x + y
…
if a==0 goto L2
L2: goto L3
b := x + y
…
if a==0 goto L3
L2: goto L3
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Peephole Optimization: Other
Flow-of-Control Optimizations
• Remove redundant jumps
44
L1:
…
…
goto L1
…
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC
Other Peephole Optimizations
• Reduction in strength: replace expensive
arithmetic operations with cheaper ones
• Utilize machine idioms
• Algebraic simplifications
45
…
a := x ^ 2
b := y / 8
…
a := x * x
b := y >> 3
…
a := a + 1
…
inc a
…
a := a + 0
b := b * 1
…
Mrs.D.Jena
Catherine
Bel,
AP/CSE,
VEC

More Related Content

What's hot (20)

PPTX
Syntax-Directed Translation into Three Address Code
sanchi29
 
PDF
Syntax Directed Definition and its applications
ShivanandManjaragi2
 
PPTX
Software Project Management - Staffing
TanishqRongta1
 
PPTX
0 1 knapsack using branch and bound
Abhishek Singh
 
PPTX
Code generation
Aparna Nayak
 
PPT
Greedy Algorihm
Muhammad Amjad Rana
 
PPTX
Peephole optimization techniques in compiler design
Anul Chaudhary
 
PPTX
BRESENHAM’S LINE DRAWING ALGORITHM
St Mary's College,Thrissur,Kerala
 
PPTX
Lexical analyzer generator lex
Anusuya123
 
PPT
Pattern matching
shravs_188
 
PPTX
Principal Sources of Optimization in compiler design
LogsAk
 
PPTX
Travelling salesman dynamic programming
maharajdey
 
PDF
Compiler unit 5
BBDITM LUCKNOW
 
PPTX
Basic blocks and control flow graphs
Tilakpoudel2
 
PPTX
Relational algebra ppt
GirdharRatne
 
PPTX
Top Down Parsing, Predictive Parsing
Tanzeela_Hussain
 
PPTX
Substitution techniques
vinitha96
 
PDF
Issues in the design of Code Generator
Darshan sai Reddy
 
PPTX
pipeline in computer architecture design
ssuser87fa0c1
 
PPTX
LR(1) and SLR(1) parsing
R Islam
 
Syntax-Directed Translation into Three Address Code
sanchi29
 
Syntax Directed Definition and its applications
ShivanandManjaragi2
 
Software Project Management - Staffing
TanishqRongta1
 
0 1 knapsack using branch and bound
Abhishek Singh
 
Code generation
Aparna Nayak
 
Greedy Algorihm
Muhammad Amjad Rana
 
Peephole optimization techniques in compiler design
Anul Chaudhary
 
BRESENHAM’S LINE DRAWING ALGORITHM
St Mary's College,Thrissur,Kerala
 
Lexical analyzer generator lex
Anusuya123
 
Pattern matching
shravs_188
 
Principal Sources of Optimization in compiler design
LogsAk
 
Travelling salesman dynamic programming
maharajdey
 
Compiler unit 5
BBDITM LUCKNOW
 
Basic blocks and control flow graphs
Tilakpoudel2
 
Relational algebra ppt
GirdharRatne
 
Top Down Parsing, Predictive Parsing
Tanzeela_Hussain
 
Substitution techniques
vinitha96
 
Issues in the design of Code Generator
Darshan sai Reddy
 
pipeline in computer architecture design
ssuser87fa0c1
 
LR(1) and SLR(1) parsing
R Islam
 

Similar to Compiler Design Unit 5 (20)

PPTX
Compiler Design_Code generation techniques.pptx
RushaliDeshmukh2
 
PPT
COMPILER_DESIGN_CLASS 2.ppt
ssuserebb9821
 
PPTX
COMPILER_DESIGN_CLASS 1.pptx
ssuserebb9821
 
PDF
Compiler unit 4
BBDITM LUCKNOW
 
PPT
456589.-Compiler-Design-Code-Generation (1).ppt
boyingbo
 
PDF
Intermediate code generation
Akshaya Arunan
 
PDF
Chapter 11 - Intermediate Code Generation.pdf
RAnwarpasha
 
PPT
PRESENTATION ON DATA STRUCTURE AND THEIR TYPE
nikhilcse1
 
PPT
456589.-Compiler-Design-Code-Generation (1).ppt
MohibKhan79
 
PPT
Code Generations - 1 compiler design.ppt
SreepriyaPilla
 
PDF
Introduction to Compiler Development
Logan Chien
 
PPT
ERTS UNIT 3.ppt
Pavithra525349
 
PPTX
Compiler Design theory and various phases of compiler.pptx
aabbpy249
 
PPTX
L1.1.2 Introduction to Programming Languages.pptx
shiblyrahman7
 
PPTX
Code Generation Part-2 in Compiler Construction
ProfMonikaShah
 
PPTX
UNIT IV Compiler.pptx RUNTIMEENVIRONMENT
KavithaNagendran1
 
PPT
458237.-Compiler-Design-Intermediate-code-generation.ppt
PalaniSamyB3
 
PDF
Wondershare UniConverter Crack Download Latest 2025
tanveerbhaikp06
 
Compiler Design_Code generation techniques.pptx
RushaliDeshmukh2
 
COMPILER_DESIGN_CLASS 2.ppt
ssuserebb9821
 
COMPILER_DESIGN_CLASS 1.pptx
ssuserebb9821
 
Compiler unit 4
BBDITM LUCKNOW
 
456589.-Compiler-Design-Code-Generation (1).ppt
boyingbo
 
Intermediate code generation
Akshaya Arunan
 
Chapter 11 - Intermediate Code Generation.pdf
RAnwarpasha
 
PRESENTATION ON DATA STRUCTURE AND THEIR TYPE
nikhilcse1
 
456589.-Compiler-Design-Code-Generation (1).ppt
MohibKhan79
 
Code Generations - 1 compiler design.ppt
SreepriyaPilla
 
Introduction to Compiler Development
Logan Chien
 
ERTS UNIT 3.ppt
Pavithra525349
 
Compiler Design theory and various phases of compiler.pptx
aabbpy249
 
L1.1.2 Introduction to Programming Languages.pptx
shiblyrahman7
 
Code Generation Part-2 in Compiler Construction
ProfMonikaShah
 
UNIT IV Compiler.pptx RUNTIMEENVIRONMENT
KavithaNagendran1
 
458237.-Compiler-Design-Intermediate-code-generation.ppt
PalaniSamyB3
 
Wondershare UniConverter Crack Download Latest 2025
tanveerbhaikp06
 
Ad

More from Jena Catherine Bel D (10)

PPTX
Compiler Design Unit 4
Jena Catherine Bel D
 
PPTX
Compiler Design Unit 3
Jena Catherine Bel D
 
PPTX
Compiler Design Unit 2
Jena Catherine Bel D
 
PPT
Compiler Design Unit 1
Jena Catherine Bel D
 
PPT
Theory of Computation Unit 5
Jena Catherine Bel D
 
PPTX
Theory of Computation Unit 4
Jena Catherine Bel D
 
PPTX
Theory of Computation Unit 3
Jena Catherine Bel D
 
PPTX
Theory of Computation Unit 2
Jena Catherine Bel D
 
PPTX
Theory of Computation Unit 1
Jena Catherine Bel D
 
Compiler Design Unit 4
Jena Catherine Bel D
 
Compiler Design Unit 3
Jena Catherine Bel D
 
Compiler Design Unit 2
Jena Catherine Bel D
 
Compiler Design Unit 1
Jena Catherine Bel D
 
Theory of Computation Unit 5
Jena Catherine Bel D
 
Theory of Computation Unit 4
Jena Catherine Bel D
 
Theory of Computation Unit 3
Jena Catherine Bel D
 
Theory of Computation Unit 2
Jena Catherine Bel D
 
Theory of Computation Unit 1
Jena Catherine Bel D
 
Ad

Recently uploaded (20)

DOC
MRRS Strength and Durability of Concrete
CivilMythili
 
PPTX
原版一样(Acadia毕业证书)加拿大阿卡迪亚大学毕业证办理方法
Taqyea
 
PPTX
Types of Bearing_Specifications_PPT.pptx
PranjulAgrahariAkash
 
PDF
Unified_Cloud_Comm_Presentation anil singh ppt
anilsingh298751
 
PDF
MAD Unit - 2 Activity and Fragment Management in Android (Diploma IT)
JappanMavani
 
PDF
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
PDF
Reasons for the succes of MENARD PRESSUREMETER.pdf
majdiamz
 
PPTX
GitOps_Without_K8s_Training_detailed git repository
DanialHabibi2
 
PDF
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
PPTX
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
PPTX
The Role of Information Technology in Environmental Protectio....pptx
nallamillisriram
 
PPTX
Worm gear strength and wear calculation as per standard VB Bhandari Databook.
shahveer210504
 
PDF
PORTFOLIO Golam Kibria Khan — architect with a passion for thoughtful design...
MasumKhan59
 
PPTX
GitOps_Without_K8s_Training simple one without k8s
DanialHabibi2
 
PPTX
Depth First Search Algorithm in 🧠 DFS in Artificial Intelligence (AI)
rafeeqshaik212002
 
PPTX
Introduction to Design of Machine Elements
PradeepKumarS27
 
PDF
Biomechanics of Gait: Engineering Solutions for Rehabilitation (www.kiu.ac.ug)
publication11
 
PPTX
Thermal runway and thermal stability.pptx
godow93766
 
PDF
Ethics and Trustworthy AI in Healthcare – Governing Sensitive Data, Profiling...
AlqualsaDIResearchGr
 
PDF
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 
MRRS Strength and Durability of Concrete
CivilMythili
 
原版一样(Acadia毕业证书)加拿大阿卡迪亚大学毕业证办理方法
Taqyea
 
Types of Bearing_Specifications_PPT.pptx
PranjulAgrahariAkash
 
Unified_Cloud_Comm_Presentation anil singh ppt
anilsingh298751
 
MAD Unit - 2 Activity and Fragment Management in Android (Diploma IT)
JappanMavani
 
Pressure Measurement training for engineers and Technicians
AIESOLUTIONS
 
Reasons for the succes of MENARD PRESSUREMETER.pdf
majdiamz
 
GitOps_Without_K8s_Training_detailed git repository
DanialHabibi2
 
Basic_Concepts_in_Clinical_Biochemistry_2018كيمياء_عملي.pdf
AdelLoin
 
Lecture 1 Shell and Tube Heat exchanger-1.pptx
mailforillegalwork
 
The Role of Information Technology in Environmental Protectio....pptx
nallamillisriram
 
Worm gear strength and wear calculation as per standard VB Bhandari Databook.
shahveer210504
 
PORTFOLIO Golam Kibria Khan — architect with a passion for thoughtful design...
MasumKhan59
 
GitOps_Without_K8s_Training simple one without k8s
DanialHabibi2
 
Depth First Search Algorithm in 🧠 DFS in Artificial Intelligence (AI)
rafeeqshaik212002
 
Introduction to Design of Machine Elements
PradeepKumarS27
 
Biomechanics of Gait: Engineering Solutions for Rehabilitation (www.kiu.ac.ug)
publication11
 
Thermal runway and thermal stability.pptx
godow93766
 
Ethics and Trustworthy AI in Healthcare – Governing Sensitive Data, Profiling...
AlqualsaDIResearchGr
 
MAD Unit - 1 Introduction of Android IT Department
JappanMavani
 

Compiler Design Unit 5

  • 1. UNIT V Code Optimization & Code Generation Mrs.D.Jena Catherine Bel, Assistant Professor, CSE, Velammal Engineering College
  • 2. Position of a Code Generator in the Compiler Model 2 Front-End Code Optimizer Source program Symbol Table Lexical error Syntax error Semantic error Intermediate code Code Generator Intermediate code Target program Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 3. Code Generation • Code produced by compiler must be correct • Source to target program transformation is semantics preserving • Code produced by compiler should be of high quality • Effective use of target machine resources • Heuristic techniques can generate good but suboptimal code, because generating optimal code is undecidable 3 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 4. Target Program Code • The back-end code generator of a compiler may generate different forms of code, depending on the requirements: • Absolute machine code (executable code) • Relocatable machine code (object files for linker) • Assembly language (facilitates debugging) • Byte code forms for interpreters (e.g. JVM) 4 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 5. The Target Machine • Implementing code generation requires thorough understanding of the target machine architecture and its instruction set • Our (hypothetical) machine: • Byte-addressable (word = 4 bytes) • Has n general purpose registers R0, R1, …, Rn-1 • Two-address instructions of the form op source, destination 5 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 6. The Target Machine: Op-codes and Address Modes • Op-codes (op), for example MOV (move content of source to destination) ADD (add content of source to destination) SUB (subtract content of source from dest.) 6 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 7. 7 Mode For m Address Added Cost Absolute M M 1 Register R R 0 Indexed c(R) c+contents(R) 1 Indirect register *R contents(R) 0 Indirect indexed *c(R ) contents(c+contents (R)) 1 Literal #c N/A 1 Address modes Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 8. Instruction Costs • Machine is a simple, non-super-scalar processor with fixed instruction costs • Realistic machines have deep pipelines, I-cache, D-cache, etc. • Define the cost of instruction = 1 + cost(source-mode) + cost(destination- mode) 8 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 9. Examples 9 Instruction Operation Cost MOV R0,R1 Store content(R0) into register R1 1 MOV R0,M Store content(R0) into memory location M 2 MOV M,R0 Store content(M) into register R0 2 MOV 4(R0),M Store contents(4+contents(R0)) into M 3 MOV *4(R0),M Store contents(contents(4+contents(R0))) into M 3 MOV #1,R0 Store 1 into R0 2 ADD 4(R0),*12(R1) Add contents(4+contents(R0)) to contents(12+contents(R1)) 3 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 10. Instruction Selection • Instruction selection is important to obtain efficient code • Suppose we translate three-address code x:=y+z to: MOV y,R0 ADD z,R0 MOV R0,x 10 a:=a+1 MOV a,R0 ADD #1,R0 MOV R0,a ADD #1,a INC a Cost = 6 Cost = 3 Cost = 2 Better Better Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 11. Instruction Selection: Utilizing Addressing Modes • Suppose we translate a:=b+c into MOV b,R0 ADD c,R0 MOV R0,a • Assuming addresses of a, b, and c are stored in R0, R1, and R2 MOV *R1,*R0 ADD *R2,*R0 • Assuming R1 and R2 contain values of b and c ADD R2,R1 MOV R1,a 11 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 12. Need for Global Machine- Specific Code Optimizations • Suppose we translate three-address code x:=y+z to: MOV y,R0 ADD z,R0 MOV R0,x • Then, we translate a:=b+c d:=a+e to: MOV a,R0 ADD b,R0 MOV R0,a MOV a,R0 ADD e,R0 MOV R0,d 12 Redundant Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 13. Register Allocation and Assignment • Efficient utilization of the limited set of registers is important to generate good code • Registers are assigned by • Register allocation to select the set of variables that will reside in registers at a point in the code • Register assignment to pick the specific register that a variable will reside in • Finding an optimal register assignment in general is NP-complete 13 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 14. Example 14 t:=a+b t:=t*c t:=t/d MOV a,R1 ADD b,R1 MUL c,R1 DIV d,R1 MOV R1,t t:=a*b t:=t+a t:=t/d MOV a,R0 MOV R0,R1 MUL b,R1 ADD R0,R1 DIV d,R1 MOV R1,t { R1=t } { R0=a, R1=t } Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 15. Choice of Evaluation Order • When instructions are independent, their evaluation order can be changed 15 t1:=a+b t2:=c+d t3:=e*t2 t4:=t1-t3 a+b-(c+d)*e MOV a,R0 ADD b,R0 MOV R0,t1 MOV c,R1 ADD d,R1 MOV e,R0 MUL R1,R0 MOV t1,R1 SUB R0,R1 MOV R1,t4 t2:=c+d t3:=e*t2 t1:=a+b t4:=t1-t3 MOV c,R0 ADD d,R0 MOV e,R1 MUL R0,R1 MOV a,R0 ADD b,R0 SUB R1,R0 MOV R0,t4 reorder Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 16. Flow Graphs • A flow graph is a graphical depiction of a sequence of instructions with control flow edges • A flow graph can be defined at the intermediate code level or target code level 16 MOV 1,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 MOV 0,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 17. Basic Blocks • A basic block is a sequence of consecutive instructions with exactly one entry point and one exit point (with natural flow or a branch instruction) 17 MOV 1,R0 MOV n,R1 JMP L2 MOV 1,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 18. Basic Blocks and Control Flow Graphs • A control flow graph (CFG) is a directed graph with basic blocks Bi as vertices and with edges BiBj iff Bj can be executed immediately after Bi 18 MOV 1,R0 MOV n,R1 JMP L2 MOV 1,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 19. Successor and Predecessor Blocks • Suppose the CFG has an edge B1B2 • Basic block B1 is a predecessor of B2 • Basic block B2 is a successor of B1 19 MOV 1,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 20. Partition Algorithm for Basic Blocks 20 Input: A sequence of three-address statements Output: A list of basic blocks with each three-address statement in exactly one block 1. Determine the set of leaders, the first statements of basic blocks a) The first statement is the leader b) Any statement that is the target of a goto is a leader c) Any statement that immediately follows a goto is a leader 2. For each leader, its basic block consist of the leader and all statements up to but not including the next leader or the end of the program Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 21. Loops • A loop is a collection of basic blocks, such that • All blocks in the collection are strongly connected • The collection has a unique entry, and the only way to reach a block in the loop is through the entry 21 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 22. Loops (Example) 22 MOV 1,R0 MOV n,R1 JMP L2 L1: MUL 2,R0 SUB 1,R1 L2: JMPNZ R1,L1 B1: B2: B3: L3: ADD 2,R2 SUB 1,R0 JMPNZ R0,L3 B4: Strongly connected components: SCC={{B2,B3}, {B4} } Entries: B3, B4 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 23. Equivalence of Basic Blocks • Two basic blocks are (semantically) equivalent if they compute the same set of expressions 23 b := 0 t1 := a + b t2 := c * t1 a := t2 a := c * a b := 0 a := c*a b := 0 a := c*a b := 0 Blocks are equivalent, assuming t1 and t2 are dead: no longer used (no longer live) Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 24. Transformations on Basic Blocks • A code-improving transformation is a code optimization to improve speed or reduce code size • Global transformations are performed across basic blocks • Local transformations are only performed on single basic blocks • Transformations must be safe and preserve the meaning of the code • A local transformation is safe if the transformed basic block is guaranteed to be equivalent to its original form 24 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 25. Common-Subexpression Elimination • Remove redundant computations 25 a := b + c b := a - d c := b + c d := a - d a := b + c b := a - d c := b + c d := b t1 := b * c t2 := a - t1 t3 := b * c t4 := t2 + t3 t1 := b * c t2 := a - t1 t4 := t2 + t1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 26. Dead Code Elimination • Remove unused statements 26 b := a + 1 a := b + c … b := a + 1 … Assuming a is dead (not used) b := x + y … if true goto L2 Remove unreachable code Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 27. Renaming Temporary Variables • Temporary variables that are dead at the end of a block can be safely renamed 27 t1 := b + c t2 := a - t1 t1 := t1 * d d := t2 + t1 t1 := b + c t2 := a - t1 t3 := t1 * d d := t2 + t3 Normal-form block Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 28. Interchange of Statements • Independent statements can be reordered 28 t1 := b + c t2 := a - t1 t3 := t1 * d d := t2 + t3 t1 := b + c t3 := t1 * d t2 := a - t1 d := t2 + t3 Note that normal-form blocks permit all statement interchanges that are possible Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 29. Algebraic Transformations • Change arithmetic operations to transform blocks to algebraic equivalent forms 29 t1 := a - a t2 := b + t1 t3 := 2 * t2 t1 := 0 t2 := b t3 := t2 << 1 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 30. Next-Use • Next-use information is needed for dead-code elimination and register assignment • Next-use is computed by a backward scan of a basic block and performing the following actions on statement i: x := y op z • Add liveness/next-use info on x, y, and z to statement i • Set x to “not live” and “no next use” • Set y and z to “live” and the next uses of y and z to i 30 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 31. Next-Use (Step 1) 31 i: a := b + c j: t := a + b [ live(a) = true, live(b) = true, live(t) = true, nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ] Attach current live/next-use information Because info is empty, assume variables are live (Data flow analysis Ch.10 can provide accurate information) Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 32. Next-Use (Step 2) 32 i: a := b + c j: t := a + b [ live(a) = true, live(b) = true, live(t) = true, nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ] live(a) = true nextuse(a) = j live(b) = true nextuse(b) = j live(t) = false nextuse(t) = none Compute live/next-use information at j Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 33. Next-Use (Step 3) 33 i: a := b + c j: t := a + b [ live(a) = true, live(b) = true, live(t) = true, nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ] Attach current live/next-use information to i [ live(a) = true, live(b) = true, live(c) = false, nextuse(a) = j, nextuse(b) = j, nextuse(c) = none ] Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 34. Next-Use (Step 4) 34 i: a := b + c j: t := a + b live(a) = false nextuse(a) = none live(b) = true nextuse(b) = i live(c) = true nextuse(c) = i live(t) = false nextuse(t) = none [ live(a) = false, live(b) = false, live(t) = false, nextuse(a) = none, nextuse(b) = none, nextuse(t) = none ] [ live(a) = true, live(b) = true, live(c) = false, nextuse(a) = j, nextuse(b) = j, nextuse(c) = none ] Compute live/next-use information i Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 35. A Code Generator • Generates target code for a sequence of three- address statements using next-use information • Uses new function getreg to assign registers to variables • Computed results are kept in registers as long as possible, which means: • Result is needed in another computation • Register is kept up to a procedure call or end of block • Checks if operands to three-address code are available in registers 35 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 36. The Code Generation Algorithm • For each statement x := y op z 1. Set location L = getreg(y, z) 2. If y  L then generate MOV y’,L where y’ denotes one of the locations where the value of y is available (choose register if possible) 3. Generate OP z’,L where z’ is one of the locations of z; Update register/address descriptor of x to include L 4. If y and/or z has no next use and is stored in register, update register descriptors to remove y and/or z 36 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 37. Register and Address Descriptors • A register descriptor keeps track of what is currently stored in a register at a particular point in the code, e.g. a local variable, argument, global variable, etc. MOV a,R0 “R0 contains a” • An address descriptor keeps track of the location where the current value of the name can be found at run time, e.g. a register, stack location, memory address, etc. MOV a,R0 MOV R0,R1 “a in R0 and R1” 37 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 38. The getreg Algorithm • To compute getreg(y,z) 1. If y is stored in a register R and R only holds the value y, and y has no next use, then return R; Update address descriptor: value y no longer in R 2. Else, return a new empty register if available 3. Else, find an occupied register R; Store contents (register spill) by generating MOV R,M for every M in address descriptor of y; Return register R 4. Return a memory location 38 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 39. Code Generation Example 39 Statements Code Generated Register Descriptor Address Descriptor t := a - b u := a - c v := t + u d := v + u MOV a,R0 SUB b,R0 MOV a,R1 SUB c,R1 ADD R1,R0 ADD R1,R0 MOV R0,d Registers empty R0 contains t R0 contains t R1 contains u R0 contains v R1 contains u R0 contains d t in R0 t in R0 u in R1 u in R1 v in R0 d in R0 d in R0 and memory Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 40. Peephole Optimization • Examines a short sequence of target instructions in a window (peephole) and replaces the instructions by a faster and/or shorter sequence when possible • Applied to intermediate code or target code • Typical optimizations: • Redundant instruction elimination • Flow-of-control optimizations • Algebraic simplifications • Use of machine idioms 40 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 41. Peephole Opt: Eliminating Redundant Loads and Stores • Consider MOV R0,a MOV a,R0 • The second instruction can be deleted, but only if it is not labeled with a target label • Peephole represents sequence of instructions with at most one entry point • The first instruction can also be deleted if live(a)=false 41 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 42. Peephole Optimization: Deleting Unreachable Code • Unlabeled blocks can be removed 42 b := x + y … goto L2 b := x + y … if 0==0 goto L2 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 43. Peephole Optimization: Branch Chaining • Shorten chain of branches by modifying target labels 43 b := x + y … if a==0 goto L2 L2: goto L3 b := x + y … if a==0 goto L3 L2: goto L3 Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 44. Peephole Optimization: Other Flow-of-Control Optimizations • Remove redundant jumps 44 L1: … … goto L1 … Mrs.D.Jena Catherine Bel, AP/CSE, VEC
  • 45. Other Peephole Optimizations • Reduction in strength: replace expensive arithmetic operations with cheaper ones • Utilize machine idioms • Algebraic simplifications 45 … a := x ^ 2 b := y / 8 … a := x * x b := y >> 3 … a := a + 1 … inc a … a := a + 0 b := b * 1 … Mrs.D.Jena Catherine Bel, AP/CSE, VEC