intermediate code representations
DESCRIPTION
Intermediate Code Representations. Conceptual phases of compiler. Lexical Analysis (scanner). Semantic Analysis. Code generation. Syntax analysis (parser). Code optimization. Optimized code. Sequence of tokens. Intermediate code - IR 1. Intermediate code IR 2. Target code. - PowerPoint PPT PresentationTRANSCRIPT
Conceptual phases of compiler
LexicalAnalysis(scanner)
Syntaxanalysis(parser)
SemanticAnalysis
Codeoptimization
Codegeneration
Sequence oftokens
Intermediatecode - IR1
Intermediatecode IR2
Optimizedcode Target code
Front Endmachine independentlanguage dependent
Middle Back Endmachine dependentlanguage independent
IR – Encodes Compiler’s Program Knowledge
Thus, some IR PROPERTIES:
•Ease of generation•Ease of manipulation•Size•Freedom of Expression•Level of Abstraction
Selecting IR is critical.
3 Categories of IRs
1.Structural/Graphical - AST and Concrete ST - call graph - program dependence graph (PDG)2. Linear - 3-address code - abstract stack machine code3.Hybrid - control flow graph (CFG)
Level of Abstraction
Consider:A[j,i] = @A + j*10 + i
[ ]
A I J
Loadi 1, R1Sub RJ, R1, R2Loadi 10, R3Mult R2, R3, R4Sub Ri, R1, r5Add R4, R5, R6Loadi @A, R7Add R7, R6, R8Load R8, RAIJ
Some Design Issues for IRs
Questions to Ponder:
1.What is the minimum needed in the language’s set of operators?
2.What is the advantage of a small set of operators?
2. What is the concern of designing the operationsClose to actual machine operations?
4. What is the potential problem of having a smallSet of IR operations?
High LevelGraphical Representations
Consider:
A -> V := E
E -> E + E | E * E | - E | id
String: a := b * - c + b * - c
Exercise: Concrete ST? AST? DAG?
Linear IRs: Three Address Code
• Sequence of instructions of the form
X := y op z
where x, y and z are variable names, constants, or compiler generated variables (“temporaries”)
• Only one operator is permitted on the RHS – expressions computed using temporaries
9
Simple Linear IRs
Write the 3 – address code for:
a := b * - c + b * - c
? = -c
= b * ?
… complete the code from the ast? The dag?
Call Graph Representation
Node = function or methodEdge from A to B : A has a call site where B is potentially called