Code Generation Mooly Sagiv html://msagiv/courses/wcc10.html Chapter 4.
Overview of program analysis Mooly Sagiv html://msagiv/courses/wcc03.html.
-
date post
22-Dec-2015 -
Category
Documents
-
view
219 -
download
0
Transcript of Overview of program analysis Mooly Sagiv html://msagiv/courses/wcc03.html.
Exam Format (Moed A 02)
• Compile- vs Run-time events (25)
• American style question (10)
• Handling new language feature in TC (40)
• Understanding (25)
Static Analysis
• Automatic derivation of static properties which hold on every execution leading to a programlocation
• Usages– Compiler optimizations
– Code quality tools• Identify bugs
• Prove absence of certain bugs
Example Static Analysis Problem
• Find variables with constant value at a given program location
int p(int x){ return x *x ;}void main(){ int z; if (getc()) z = p(6) + 8; else z = p(5) + 7; printf (z);}
int p(int x){ return (x *x) ;}void main(){ int z; if (getc()) z = p(3) + 1; else z = p(-2) + 6; printf (z);}
A Simple Example/* c */
L0: a := 0
/* ac */
L1: b := a + 1
/* bc */
c := c + b
/* bc */
a := b * 2
/* ac */
if c < N goto L1
/* c */
return c
a b
c
List reverse(Element head){
List rev, n;rev = NULL;
while (head != NULL) {n = head next;
head next = rev; head = n;
rev = head;
}return rev;
}
Memory Leakage
leakage of address pointed to by head
Memory LeakageElement reverse(Element head) {
Element rev, n;rev = NULL;
while (head != NULL) {n = head next;
head next = rev;
rev = head;
head = n;
}return rev; }
✔ No memory leaks
Compiler Scheme
String Scanner
Parser
Semantic Analysis
Code Generator
Static analysis
Transformations
Tokens
source-program
tokens
AST
IR
IR +information
Undecidability issues
• It is impossible to compute exact static information
• Finding if a program point is reachable
• Difficulty of interesting data properties
Undecidabily
• A variable is live at a givenpoint in the program– if its current value is used after this point prior
to a definition in some execution path
• It is undecidable if a variable is live at a given program location
Conservative (Sound)
• The compiler need not generate the optimal code
• Can use more registers (“spill code”) than necessary
• Find an upper approximation of the live variables
• Err on the safe side• A superset of edges in the interference graph• Not too many superfluous live variables
Conservative Software Quality Tools
• Can never miss an error
• Buy may produce false alarms– Warning on non existing errors
Iterative computation of conservative static information
• Construct a control flow graph
• Optimistically start with the best value at every node
• “Interpret” every statement in a conservative way
• Stop when no changes occur
/* c */
L0: a := 0
/* ac */
L1: b := a + 1
/* bc */
c := c + b
/* bc */
a := b * 2
/* ac */
if c < N goto L1
/* c */
return c
a := 0 ;
b := a +1 ;
c := c +b ;
a := b*2 ;
c <N goto L1
return c ;
a := 0 ;
b := a +1 ;
c := c +b ;
a := b*2 ;
c <N goto L1
return c ;
{c, a}
{c, a}
{c, b}
{c, a}
{c, b}