Topic I: Fundamentals in Code Generation

Download Report

Transcript Topic I: Fundamentals in Code Generation

An Overview to
Compiler Design
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
1
Outline
• An Overview of Compiler Structure
• Front End
• Middle End
• Back End
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
2
Reading
Slides and Lecture Notes
Aho,Lam,Sethi,Ullman:
Chapter 1.4 ~ 1.5
Chapter 2.1 ~ 2.7
Chapter 3.1 ~ 3.5
Chapter 4.1 ~ 4.5
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
3
A Review on Compiler
Structure/Design
• Overall structure
• Front-end: lexical and syntax analysis
• Middle-end: machine independent code analysis and
(scalar, and sometimes loop nest ) optimization
• Back-end: Machine dependent code analysis and
optimization
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
4
Motivation for Compiler
optimization
Source Program
COMPILER
Machine Code
Input program example:
int foo( )
{
int x;
return (x + x) ;
}
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
5
Output Assembly Code
(non-optimized)
foo:
sub
sw
add
sw
add
move
lw
lw
add
jr
2020/4/24
$sp, $sp, 8
$fp, 8($sp)
$fp, $sp, 8
$ra, -4($fp)
$t0, $a0 $a0
$v0, $t0
$ra, -4($fp)
$fp, 0($fp)
$sp, $sp, 8
$ra
\course\cpeg421-08s\Topic-1a.ppt
6
Output Assembly Code
(non-optimized)
foo:
sub
sw
add
sw
add
move
lw
lw
add
jr
2020/4/24
$sp, $sp, 8
$fp, 8($sp)
$fp, $sp, 8
$ra, -4($fp)
$t0, $a0 $a0
$v0, $t0
$ra, -4($fp)
$fp, 0($fp)
$sp, $sp, 8
$ra
%
%
%
%
%
%
%
%
%
%
Push stack frame
Save old frame pointer
Set new frame pointer
Save return address
Addition
Copy return value
Restore return address
Restore frame pointer
Pop stack frame
Jump to return address
\course\cpeg421-08s\Topic-1a.ppt
7
Output Assembly Code -Revisited (non-optimized)
foo:
sub
sw
add
sw
add
move
lw
lw
add
jr
2020/4/24
$sp, $sp, 8 %
$fp, 8($sp) %
$fp, $sp, 8 %
$ra, -4($fp) %
$t0, $a0, $a0 %
$v0, $t0
%
$ra, -4($fp) %
$fp, 0($fp) %
$sp, $sp, 8 %
$ra
%
Push stack frame (for what?)
Save old frame pointer (for what?)
Set new frame pointer
Save return address (for what?)
Addition
Copy return value
Restore return address
Restore frame pointer
Pop stack frame
Jump to return address
\course\cpeg421-08s\Topic-1a.ppt
8
Output Assembly Code
(optimized)
foo:
add
jr
2020/4/24
$v0,
$ra
$a0,
$a0
% Set result
% Jump to return address
\course\cpeg421-08s\Topic-1a.ppt
9
Runtime Memory Organization
…
Entry point for
procedure 2
code for
procedure
1
code for
procedure
2
Entry point for
procedure n
code for
procedure
n
Code memory
code area
global/static
area
stack
frame-1
frame-2
frame-3
…
Entry point
for procedure 1
free space
Runtime
stack
heap
Space for arguments
(parameters)
Space for bookkeeping
Information, including
Return address
Space in local data
Space for local
temporaries
A stack frame
Address space
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
10
Phases of a Compiler
Source program
Intermediate-code Generator
Lexical Analyzer (Scanner)
Non-optimized Intermediate Code
Tokens
Intermediate-code Optimizer
Syntax Analyzer (Parser)
Optimized Intermediate Code
Parse tree
Target-code Generator/Opt
Semantic Analyzer
Target machine code
Abstract Syntax Tree w/ Attributes
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
11
Low-level Model
Mixed-level Model
String of characters
String of characters
Lexical
analyzer
String of tokens
Parser
Lexical
analyzer
String of tokens
Parser
Parse tree
Semantic
analyzer
Parse tree
Semantic
analyzer
Abstract syntax tree
Translator
Low-level intermediate code
Abstract Syntax tree
Intermediate-code
generator
Medium-level intermediate code
Optimizer
Optimizer
Medium-level intermediate code
Low-level intermediate code
Final
assembly
Relocatable object module or
runnable machine code
Code generator
Low-level intermediate code
Postpass
optimizer
Two models of compiler structures
Relocatable object module or
runnable machine code
(Muchnick, pp. 08)
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
12
A Good Compiler Infrastructure
Needed – A modern View
Front end
Interprocedural Analysis and Optimization
Good IR
Loop Nest Optimization and Parallelization
Global (Scalar) Optimization
Middle-End
Backend
Code Generation
2020/4/24
\course\cpeg421-08s\Topic-1a.ppt
13