Intermediate Code Representations Conceptual phases of compiler Lexical





![Level of Abstraction Consider: A[j, i] = @A + j*10 + i [] A Level of Abstraction Consider: A[j, i] = @A + j*10 + i [] A](https://slidetodoc.com/presentation_image_h2/5b62c0b087674f5614ffaea313a8677f/image-6.jpg)
















- Slides: 22

Intermediate Code Representations

Conceptual phases of compiler Lexical Analysis (scanner) Syntax analysis (parser) Semantic Analysis Code optimization Sequence of Intermediate tokens code - IR 1 code IR 2 Front End machine independent language dependent Code generation Optimized code Middle Target code Back End machine dependent language independent

Why use an IR?

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 code 3. Hybrid - control flow graph (CFG)
![Level of Abstraction Consider Aj i A j10 i A Level of Abstraction Consider: A[j, i] = @A + j*10 + i [] A](https://slidetodoc.com/presentation_image_h2/5b62c0b087674f5614ffaea313a8677f/image-6.jpg)
Level of Abstraction Consider: A[j, i] = @A + j*10 + i [] A I J Loadi 1, R 1 Sub RJ, R 1, R 2 Loadi 10, R 3 Mult R 2, R 3, R 4 Sub Ri, R 1, r 5 Add R 4, R 5, R 6 Loadi @A, R 7 Add R 7, R 6, R 8 Load R 8, 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 operations Close to actual machine operations? 4. What is the potential problem of having a small Set of IR operations?

High Level Graphical 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?




Exercise • Give the 3 address code for: • Z : = x * y + a[j] / sum(b) 14

More Simple Linear IRs Stack machine code: push, pop, ops Consider: x – 2 * y Advantages?

Hybrid IRs


Exercise – Construct the CFG

Call Graph Representation Node = function or method Edge from A to B : A has a call site where B is potentially called

Exercise: Construct a call graph

Multiple IRs: WHIRL

Key Highlights of IRs