Introduction to Advanced Topics Chapter 1
description
Transcript of Introduction to Advanced Topics Chapter 1
Introduction to Advanced Topics
Chapter 1
Mooly SagivSchrierber 31703-640-7606
www.math.tau.ac.il/~sagiv/courses/acd.html
Outline• Course requirements• Review of compiler structure• Advanced issues in
elementary topics• The importance of optimizations• Structure of optimizing compilers• Placement of optimizations • Advanced topics
Course Requirements
• Prepare course notes 10%
• Theoretical assignments 30%
• Final home exam 60%
Compiler Structure
Symbol table and
access routines
OS
Interface
String of characters
Scanner
tokens
Semantic
analyzer
Parser
Code Generator
IR
AST
Object code
Advanced Issues inElementary Topics
• Symbol table management(3)– Efficiency– Overloading
• Type Inference• Intermediate Language Selection(4)• Run-Time Support(5)• Producing Code Generators (6)
procedure BACH is procedure put (x: boolean) is begin null; end; procedure put (x: float) is begin null; end; procedure put (x: integer) is begin null; end; package x is type boolean is (false, true); function f return boolean; -- (D1) end x; package body x is function f return boolean is begin null; end; end x; function f return float is begin null; end; -- (D2) use x; begin put (f); -- (A1) A: declare f: integer; -- (D3) begin put (f); -- (A2) B: declare function f return integer is begin null; end; -- (D4) begin put (f); -- (A3) end B; end A; end BACH;
Advanced Issues inElementary Topics
• Symbol table management(3)– Efficiency– Overloading
• Type Inference• Intermediate Language Selection(4)• Run-Time Support(5)• Producing Code Generators (6)
Advanced Issues inElementary Topics
• Symbol table management(3)– Efficiency– Overloading
• Type Inference• Intermediate Language Selection(4)• Run-Time Support(5)• Producing Code Generators (6)
Intermediate Language Selection• Low Vs. High level control flow structures• Flat Vs. Hierarchical (tree)• Machine Vs. High level of instructions• (Symbolic) Registers Vs. Stack• Normal forms (SSA)• Intermediate forms: Control Flow Graph, Call
Graph, Program Dependence Graph• Issues: Engineering, efficiency, portability,
optimization level
HIR
for v v1 by v2 to v3 do
a[i] :=2
endfor
MIR
v v1
t2 v2
t3 v3
L1: if v >t3 goto L2
t4 addr a
t5 4*i
t6 t4+t5
*t6 2
v v + t2
goto L1
L2:
LIR
s2 s1
s4 s3
s6 s5
L1: if s2 >s6 goto L2
s7 addr a
s8 4*s9
s10 s7+s8
[s10] 2
s2 s2 + s4
goto L1
L2:
IRs in the Book
Single Static Assignment Form (SSA) s2 s1
s4 s3
s6 s5
L1: if s2 >s6 goto L2
s7 addr a
s8 4*s9
s10 s7+s8
[s10] 2
s2 s2 + s4
L2:
B2
s21 s1
s4 s3
s4 s3
B1
s22 (s21 , s23)
s22>=s6
N
s7 addr a
s8 4*s9
s10 s7+s8
[s10] 2
s23 s22 + s4
Y
B3
Advanced Issues inElementary Topics
• Symbol table management(3)– Efficiency– Overloading
• Type Inference• Intermediate Language Selection(4)• Run-Time Support(5)• Producing Code Generators (6)
Run-Time Support
• Data representation and instructions
• Register usage
• Stack frames (activation records)
• Parameter passing disciplines
• Symbolic and polymorphic language support
• Garbage Collection
Advanced Issues inElementary Topics
• Symbol table management(3)– Efficiency– Overloading
• Type Inference• Intermediate Language Selection(4)• Run-Time Support(5)• Producing Code Generators (6)
The Importance of Optimizations
• One pass compilers produce slow code
• Much of the time spent in loops – optimize loops
• Machines can be simpler and faster if optimizing compilers are used (RISC, VLIW)
• Programs are complex and general
• Compilers need to be modular
C code
int a, b, c, d;
c = a + b;
d = c + 1;
SPARC code
ldw a, r1
ldw b, r2
add r1, r2, r3
stw r3, c
ldw c, r3
add r3, 1, r4
stw r4, d
Optimized
SPARC code
add r1, r2, r3
add r3, 1, r4
10 cycles
2 cycles
Application Dependent Optimizations
• Functional programs– replacement of recursion by loops
(tail-calls elimination)– replacement of heap by stack
• Object Oriented Programs– Dead member elimination– Replacement of virtual by static function
• Numeric Code
• Database Code
String
Object
Scanner
Parser
Semantic
LIR generator
Optimizer
Fin. assembly
Tokens
AST
AST
LIR
LIR
Object
String
Scanner
Parser
Semantic
IR generator
Optimizer
Code generator
Tokens
AST
AST
MIR
MIR
LIRPost. optimizer
Mixed vs. Low Level Optimizers
• Mixed– Sun-SPARC, Dec. Alpha, SGI-MIPS,
Intel’s 386Easier to portMore efficient compilation?Supports CISC
• Low Level• HP-PA-RISC/IBM-Power PCMore efficient codeConceptually simpler (in RISC)
• Used for multiple programming languages
Translation by Preprocessing
• Some programming languages are translated into C– Elimination of includes, C++(cfront), Haskel
• Quick and portable solution
• C supports some indirect source level debugging
• Other examples: Fortran into “vector” Fortran program
Data-Cache Optimizations(20)String
Scanner
Parser
Semantic
Data-cache optimizer
Tokens
AST
HIR
MIR
IBM PowerPC compilerString
Object
Scanner
Parser
Semantic
LIR generator
Optimizer
Fin. assembly
Tokens
AST
AST
LIR=XIL
LIR
Data-cache optimizer
Low-to-High
High-to-Low
HIR=YIL
HIR=YIL
Outline• Review of compiler structure
• Advanced issues inelementary topics
• The importance of optimizations
• Structure of optimizing compilers
• Placement of optimizations
• Advanced Topics
Scalar replacement of array referencesData-cache optimizations
Procedure integration
Tail-call elimination
Scalar replacement of aggregates
Sparse constant propagation
Interprocedural constant propagation
Procedure specialization and cloning
Sparse conditional constant propagation
Global value numbering
Local and global copy propagation
Sparse conditional constant propagation
Dead code elimination
Common Subexpression Elimination
Loop invariant code motionPartial redundency Elimination
Inline expansion
Leaf-routine optimizations
Instruction Scheduling 1
Register allocation
Instruction Scheduling 2
Intraprocedural I-cache optimizations
Instruction prefetching
Data prefertching
Branch predication
Interprocedural register allocation
Interprocedural I-cache optimization
Scalar replacement after constant propagation
a 1
a= 1
Y N
B.x 1.0
B.y 1.0read B.x
read B.y
B.x = 1.0
Y N
c
c
c B.x
Scalar replacement before constant propagation
B.x 1.0
c 2
read B.y
B.x = 1.0
Y N
B.x B.x + c
d
d
d d
d B.x
Theoretically Open Questions
• Picking the “right” order
• Combining optimizations
• Proving correctness
Advanced Topics
• Code Profiling
• Parallelization and vectorization
• Just in time compilation
• Optimize for Power
• Trusted compilers