Intermediate Code & Local Optimizations. Lecture 20

Similar documents
Lecture Outline. Intermediate code Intermediate Code & Local Optimizations. Local optimizations. Lecture 14. Next time: global optimizations

Intermediate Code & Local Optimizations

Other Forms of Intermediate Code. Local Optimizations. Lecture 34

Administrative. Other Forms of Intermediate Code. Local Optimizations. Lecture 34. Code Generation Summary. Why Intermediate Languages?

Multi-dimensional Arrays

Local Optimizations #1

Operational Semantics of Cool

Local Optimizations #1

Introduction to Code Optimization. Lecture 36: Local Optimization. Basic Blocks. Basic-Block Example

COMS W4115 Programming Languages and Translators Lecture 21: Code Optimization April 15, 2013

Code Optimization. Code Optimization

CODE GENERATION Monday, May 31, 2010

Comp 204: Computer Systems and Their Implementation. Lecture 22: Code Generation and Optimisation

Register Allocation. CS 502 Lecture 14 11/25/08

Building a Compiler with. JoeQ. Outline of this lecture. Building a compiler: what pieces we need? AKA, how to solve Homework 2

What Do Compilers Do? How Can the Compiler Improve Performance? What Do We Mean By Optimization?

Data Structures and Algorithms in Compiler Optimization. Comp314 Lecture Dave Peixotto

Intermediate representation

Alternatives for semantic processing

opt. front end produce an intermediate representation optimizer transforms the code in IR form into an back end transforms the code in IR form into

More Code Generation and Optimization. Pat Morin COMP 3002

Tour of common optimizations

Register Allocation. Global Register Allocation Webs and Graph Coloring Node Splitting and Other Transformations

Compiler Passes. Optimization. The Role of the Optimizer. Optimizations. The Optimizer (or Middle End) Traditional Three-pass Compiler

Code optimization. Have we achieved optimal code? Impossible to answer! We make improvements to the code. Aim: faster code and/or less space

CS 406/534 Compiler Construction Putting It All Together

7. Optimization! Prof. O. Nierstrasz! Lecture notes by Marcus Denker!

Compiler Design Spring 2017

Middle End. Code Improvement (or Optimization) Analyzes IR and rewrites (or transforms) IR Primary goal is to reduce running time of the compiled code

USC 227 Office hours: 3-4 Monday and Wednesday CS553 Lecture 1 Introduction 4

Lecture 3 Local Optimizations, Intro to SSA

Optimization. ASU Textbook Chapter 9. Tsan-sheng Hsu.

Code Generation. Frédéric Haziza Spring Department of Computer Systems Uppsala University

Compiler Optimization Intermediate Representation

Group B Assignment 9. Code generation using DAG. Title of Assignment: Problem Definition: Code generation using DAG / labeled tree.

Intermediate Code Generation

Running class Timing on Java HotSpot VM, 1

Unoptimized Code Generation

Principles of Compiler Design

A Bad Name. CS 2210: Optimization. Register Allocation. Optimization. Reaching Definitions. Dataflow Analyses 4/10/2013

CS143 - Written Assignment 4 Reference Solutions

Control Flow Analysis

Global Optimization. Lecture Outline. Global flow analysis. Global constant propagation. Liveness analysis. Local Optimization. Global Optimization

CSE P 501 Compilers. Intermediate Representations Hal Perkins Spring UW CSE P 501 Spring 2018 G-1

CSE 501: Compiler Construction. Course outline. Goals for language implementation. Why study compilers? Models of compilation

Run-time Environments. Lecture 13. Prof. Alex Aiken Original Slides (Modified by Prof. Vijay Ganesh) Lecture 13

Local Optimization: Value Numbering The Desert Island Optimization. Comp 412 COMP 412 FALL Chapter 8 in EaC2e. target code

IR Optimization. May 15th, Tuesday, May 14, 13

CSE 401/M501 Compilers

Compiler construction 2009

Compiler Optimization Techniques

An Overview of Compilation

Group B Assignment 8. Title of Assignment: Problem Definition: Code optimization using DAG Perquisite: Lex, Yacc, Compiler Construction

CS153: Compilers Lecture 15: Local Optimization

Office Hours: Mon/Wed 3:30-4:30 GDC Office Hours: Tue 3:30-4:30 Thu 3:30-4:30 GDC 5.

Optimization Prof. James L. Frankel Harvard University

Compiler Optimization

CSE443 Compilers. Dr. Carl Alphonce 343 Davis Hall

CSC D70: Compiler Optimization

An Overview to Compiler Design. 2008/2/14 \course\cpeg421-08s\topic-1a.ppt 1

Code Generation. M.B.Chandak Lecture notes on Language Processing

CS 701. Class Meets. Instructor. Teaching Assistant. Key Dates. Charles N. Fischer. Fall Tuesdays & Thursdays, 11:00 12: Engineering Hall

Control Flow Analysis & Def-Use. Hwansoo Han

CS2210: Compiler Construction. Code Generation

Register Allocation 3/16/11. What a Smart Allocator Needs to Do. Global Register Allocation. Global Register Allocation. Outline.

Compilers. Optimization. Yannis Smaragdakis, U. Athens

Lecture Notes on Value Propagation

Agenda. CSE P 501 Compilers. Big Picture. Compiler Organization. Intermediate Representations. IR for Code Generation. CSE P 501 Au05 N-1

COMPILER DESIGN - CODE OPTIMIZATION

Simplification of Boolean Functions

Compiler construction in4303 lecture 9

CSE 504: Compiler Design. Instruction Selection

We can emit stack-machine-style code for expressions via recursion

Code Generation. The Main Idea of Today s Lecture. We can emit stack-machine-style code for expressions via recursion. Lecture Outline.

Introduction to optimizations. CS Compiler Design. Phases inside the compiler. Optimization. Introduction to Optimizations. V.

Dataflow Analysis. Xiaokang Qiu Purdue University. October 17, 2018 ECE 468

Instruction Selection: Peephole Matching. Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved.

Lecture 21 CIS 341: COMPILERS

G Compiler Construction Lecture 12: Code Generation I. Mohamed Zahran (aka Z)

Data Flow Analysis. Agenda CS738: Advanced Compiler Optimizations. 3-address Code Format. Assumptions

Run-time Environments

BEAMJIT, a Maze of Twisty Little Traces

IR Lowering. Notation. Lowering Methodology. Nested Expressions. Nested Statements CS412/CS413. Introduction to Compilers Tim Teitelbaum

Run-time Environments

Compiler Theory. (Intermediate Code Generation Abstract S yntax + 3 Address Code)

Introduction to Optimization Local Value Numbering

CS 403 Compiler Construction Lecture 10 Code Optimization [Based on Chapter 8.5, 9.1 of Aho2]

Programming Language Processor Theory

Field Analysis. Last time Exploit encapsulation to improve memory system performance

Concepts Introduced in Chapter 6

CFG (Control flow graph)

Lecture Compiler Middle-End

Code Generation. Lecture 31 (courtesy R. Bodik) CS164 Lecture14 Fall2004 1

Code Generation. Lecture 30

CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 19: Efficient IL Lowering 5 March 08

Control flow graphs and loop optimizations. Thursday, October 24, 13

Outline. Lecture 17: Putting it all together. Example (input program) How to make the computer understand? Example (Output assembly code) Fall 2002

Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University have explicit

CSc 453 Interpreters & Interpretation

Compiler Design. Fall Control-Flow Analysis. Prof. Pedro C. Diniz

Transcription:

Intermediate Code & Local Optimizations Lecture 20

Lecture Outline Intermediate code Local optimizations Next time: global optimizations 2

Code Generation Summary We have discussed Runtime organization Simple stack machine code generation Code generation for Objects So far, our compiler maps AST to assembly language And does not perform optimizations 3

Optimization Optimization is our last compiler phase Most complexity in modern compilers is in the optimizer Also by far the largest phase First, we need to discuss intermediate languages 4

Why Intermediate Languages? When should we perform optimizations? On AST Pro: Machine independent Con: Too high level On assembly language Pro: Exposes optimization opportunities Con: Machine dependent Con: Must reimplement optimizations when retargetting On an intermediate language Pro: Machine independent Pro: Exposes optimization opportunities 5

Intermediate Languages Intermediate language = high-level assembly Uses register names, but has an unlimited number Uses control structures like assembly language Uses opcodes but some are higher level E.g., push translates to several assembly instructions Most opcodes correspond directly to assembly opcodes 6

Three-Address Intermediate Code Each instruction is of the form x := y op z x := op y y and z are registers or constants Common form of intermediate code The expression x + y * z is translated t 1 := y * z t 2 := x + t 1 Each subexpression has a name 7

Generating Intermediate Code Similar to assembly code generation But use any number of IR registers to hold intermediate results 8

Generating Intermediate Code (Cont.) igen(e, t) function generates code to compute the value of e in register t Example: igen(e 1 + e 2, t) = igen(e 1, t 1 ) igen(e 2, t 2 ) (t 1 is a fresh register) (t 2 is a fresh register) t := t 1 + t 2 Unlimited number of registers simple code generation 9

Intermediate Code Notes You should be able to use intermediate code At the level discussed in lecture You are not expected to know how to generate intermediate code Because we won t discuss it But really just a variation on code generation... 10

An Intermediate Language P S P ε S id := id op id id := op id id := id push id id := pop if id relop id goto L L: jump L id s are register names Constants can replace id s Typical operators: +, -, * 11

Definition. Basic Blocks A basic block is a maximal sequence of instructions with: no labels (except at the first instruction), and no jumps (except in the last instruction) Idea: Cannot jump into a basic block (except at beginning) Cannot jump out of a basic block (except at end) A basic block is a single-entry, single-exit, straight-line code segment 12

Basic Block Example Consider the basic block 1. L: 2. t := 2 * x 3. w := t + x 4. if w > 0 goto L (3) executes only after (2) We can change (3) to w := 3 * x Can we eliminate (2) as well? 13

Definition. Control-Flow Graphs A control-flow graph is a directed graph with Basic blocks as nodes An edge from block A to block B if the execution can pass from the last instruction in A to the first instruction in B E.g., the last instruction in A is jump L B E.g., execution can fall-through from block A to block B 14

Example of Control-Flow Graphs x := 1 i := 1 L: x := x * x i := i + 1 if i < 10 goto L The body of a method (or procedure) can be represented as a controlflow graph There is one initial node All return nodes are terminal 15

Optimization Overview Optimization seeks to improve a program s resource utilization Execution time (most often) Code size Network messages sent, etc. Optimization should not alter what the program computes The answer must still be the same 16

A Classification of Optimizations For languages like C and C++ there are three granularities of optimizations 1. Local optimizations Apply to a basic block in isolation 2. Global optimizations Apply to a control-flow graph (method body) in isolation 3. Inter-procedural optimizations Apply across method boundaries Most compilers do (1), many do (2), few do (3) 17

Cost of Optimizations In practice, a conscious decision is made not to implement the fanciest optimization known Why? Some optimizations are hard to implement Some optimizations are costly in compilation time Some optimizations have low benefit Many fancy optimizations are all three! Goal: Maximum benefit for minimum cost 18

Local Optimizations The simplest form of optimizations No need to analyze the whole procedure body Just the basic block in question Example: algebraic simplification 19

Algebraic Simplification Some statements can be deleted x := x + 0 x := x * 1 Some statements can be simplified x := x * 0 x := 0 y := y ** 2 y := y * y x := x * 8 x := x << 3 x := x * 15 t := x << 4; x := t - x (on some machines << is faster than *; but not on all!) 20

Constant Folding Operations on constants can be computed at compile time If there is a statement x := y op z And y and z are constants Then y op z can be computed at compile time Example: x := 2 + 2 x := 4 Example: if 2 < 0 jump L can be deleted 21

Flow of Control Optimizations Eliminate unreachable basic blocks: Code that is unreachable from the initial block E.g., basic blocks that are not the target of any jump or fall through from a conditional Why would such basic blocks occur? (e.g., ifconditional always evaluates to false) Removing unreachable code makes the program smaller And sometimes also faster Due to memory cache effects (increased spatial locality) 22

Single Assignment Form Some optimizations are simplified if each register occurs only once on the left-hand side of an assignment Rewrite intermediate code in single assignment form x := z + y b := z + y a := x a := b x := 2 * x x := 2 * b (b is a fresh register) More complicated in general, due to loops 23

Common Subexpression Elimination If Basic block is in single assignment form A definition x := is the first use of x in a block Then When two assignments have the same rhs, they compute the same value Example: x := y + z x := y + z w := y + z w := x (the values of x, y, and z do not change in the code) 24

Copy Propagation If w := x appears in a block, replace subsequent uses of w with uses of x Assumes single assignment form Example: b := z + y b := z + y a := b a := b x := 2 * a x := 2 * b Only useful for enabling other optimizations Constant folding Dead code elimination 25

Copy Propagation and Constant Folding Example: a := 5 a := 5 x := 2 * a x := 10 y := x + 6 y := 16 t := x * y t := x << 4 26

Copy Propagation and Dead Code Elimination If Then w := rhs appears in a basic block w does not appear anywhere else in the program the statement w := rhs is dead and can be eliminated Dead = does not contribute to the program s result Example: (a is not used anywhere else) x := z + y b := z + y b := z + y a := x a := b x := 2 * b x := 2 * a x := 2 * b 27

Applying Local Optimizations Each local optimization does little by itself Typically optimizations interact Performing one optimization enables another Optimizing compilers repeat optimizations until no improvement is possible The optimizer can also be stopped at any point to limit compilation time 28

An Example Initial code: a := x ** 2 b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f 29

An Example Algebraic optimization: a := x ** 2 b := 3 c := x d := c * c e := b * 2 f := a + d g := e * f 30

An Example Algebraic optimization: a := x * x b := 3 c := x d := c * c e := b << 1 f := a + d g := e * f 31

An Example Copy propagation: a := x * x b := 3 c := x d := c * c e := b << 1 f := a + d g := e * f 32

An Example Copy propagation: a := x * x b := 3 c := x d := x * x e := 3 << 1 f := a + d g := e * f 33

An Example Constant folding: a := x * x b := 3 c := x d := x * x e := 3 << 1 f := a + d g := e * f 34

An Example Constant folding: a := x * x b := 3 c := x d := x * x e := 6 f := a + d g := e * f 35

An Example Common subexpression elimination: a := x * x b := 3 c := x d := x * x e := 6 f := a + d g := e * f 36

An Example Common subexpression elimination: a := x * x b := 3 c := x d := a e := 6 f := a + d g := e * f 37

An Example Copy propagation: a := x * x b := 3 c := x d := a e := 6 f := a + d g := e * f 38

An Example Copy propagation: a := x * x b := 3 c := x d := a e := 6 f := a + a g := 6 * f 39

An Example Dead code elimination: a := x * x b := 3 c := x d := a e := 6 f := a + a g := 6 * f 40

An Example Dead code elimination: a := x * x f := a + a g := 6 * f This is the final form 41

Peephole Optimizations on Assembly Code These optimizations work on intermediate code Target independent But they can be applied on assembly language also Peephole optimization is effective for improving assembly code The peephole is a short sequence of (usually contiguous) instructions The optimizer replaces the sequence with another equivalent one (but faster) 42

Peephole Optimizations (Cont.) Write peephole optimizations as replacement rules i 1,, i n j 1,, j m where the rhs is the improved version of the lhs Example: move $a $b, move $b $a move $a $b Works if move $b $a is not the target of a jump Another example addiu $a $a i, addiu $a $a j addiu $a $a i+j 43

Peephole Optimizations (Cont.) Many (but not all) of the basic block optimizations can be cast as peephole optimizations Example: addiu $a $b 0 move $a $b Example: move $a $a These two together eliminate addiu $a $a 0 As for local optimizations, peephole optimizations must be applied repeatedly for maximum effect 44

Local Optimizations: Notes Intermediate code is helpful for many optimizations Many simple optimizations can still be applied on assembly language Program optimization is grossly misnamed Code produced by optimizers is not optimal in any reasonable sense Program improvement is a more appropriate term Next time: global optimizations 45