Optimising Compilers
If a recording is not available here, also check Panopto via Moodle.
Last year’s page is still available.
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:08:17