skip to primary navigationskip to content
 

Course pages 2022–23

Optimising Compilers

Introduction

Videos have been uploaded to YouTube primarily to use their automatic captioning. If you do not require captions, please do use the videos in the Recordings tab since these are streamed on the local Cambridge network, saving on external bandwidth.

Links to YouTube videos

Contents

Introduction (20 January 2023)

1.1 Introduction

1.2 Code representation

1.3 Types of analysis

Unreachable-code and -procedure elimination (25 January 2023)

2.1 Unreachability

2.2 Unreachable-code elimination

2.3 Unreachable-procedure elimination

2.4 Code simplification

Live variable analysis (27 January 2023)

3.1 Liveness

3.2 Semantic vs syntactic liveness

3.3 Live variable analysis

3.4 Liveness algorithm

Available expression analysis (30 January 2023)

4.1  Expression availability

4.2  Available expression analysis

4.3  Data-flow equations

4.4  Available expressions algorithm

4.5  Data-flow analysis framework

Data-flow anomalies and clash graphs (1 February 2023)

5.1  Dead code

5.2  Uninitialised variables

5.3  Write-write anomalies

5.4  Clash graphs

Register allocation (3 February 2023)

6.1  Graph colouring

6.2  Colouring algorithm

6.3  Spilling registers

6.4  Non-orthogonal instructions

6.5  Procedure calling standards

Redundancy elimination (6 February 2023)

7.1  Common subexpression elimination

7.2  Copy propagation

7.3  Code motion

7.4  Example code motion

Static single assignment and strength reduction (8 February 2023)

8.1  Live-range splitting

8.2  Static single-assignment form

8.3  Strength reduction

Abstract interpretation (10 February 2023)

9.1  Abstract interpretation

9.2  Multiplying integers

9.3  Adding integers

9.4  Abstraction

Strictness analysis (13 February 2023)

10.1  Strictness

10.2  Strictness abstract interpretation

10.3  Algorithm

Constraint-based analysis (15 February 2023)

11.1  0CFA

11.2  Generating constraints

11.3  Solving constraints

Inference-based analysis (17 February 2023)

12.1  Type systems

12.2  Example typing

12.3  Inferring other properties

Effect systems (20 February 2023)

13.1  Effect systems

13.2  Effect subtyping

Alias and points-to analysis (20 February 2023)

13.3  Points-to analysis

13.4  Andersen analysis example

Instruction scheduling (22 February 2023)

14.1  Instruction execution

14.2  Pipeline hazards

14.3  Instruction dependencies

14.4  Algorithm

Register allocation vs instruction scheduling, reverse engineering (24 February 2023)

15.1  Register allocation vs instruction scheduling

15.2  Legalities of reverse engineering

Decompilation (27 February 2023)

16.1  Decompilation

16.2  Dominance

16.3  Type reconstruction

Recap (27 February 2023)

99.1  Recap

Total duration: 10:10:23