Contents 1 Introduction 2 Intermediate codes 2.1 Uncol 2.2 Janus 2.3 OCODE 2.4 P-code 2.5 Z-code 2.6 Summary and conclusions 2.6.1 Error checking and reporting 2.6.2 Efficiency 2.6.3 Assumptions 2.6.4 Interpretation 3 Optimisations 3.1 Classification of optimisations 3.1.1 Universal optimisations 3.1.2 Local optimisations 3.1.2.1 Remembering 3.1.2.2 Delaying 3.1.2.3 Inaccessable code removal 3.1.2.4 Peephole optimisation 3.1.2.5 Special cases 3.1.2.6 Algebraic manipulation