  In high performance domains like image processing, physics simulation or
machine learning, program performance is critical. Programmers called
performance engineers are responsible for the challenging task of optimising
programs. Two major challenges prevent modern compilers targeting heterogeneous
architectures from reliably automating optimisation. First, domain-specific
compilers such as Halide for image processing and TVM for machine learning are
difficult to extend with the new optimisations required by new algorithms and
hardware. Second, automatic optimisation is often unable to achieve the
required performance, and performance engineers often fall back to painstaking
manual optimisation.
  This thesis shows the potential of the Shine compiler to achieve
domain-extensibility, controllable automation, and generate high performance
code. Domain-extensibility facilitates adapting compilers to new algorithms and
hardware. Controllable automation enables performance engineers to gradually
take control of the optimisation process.
  The first research contribution is to add 3 code generation features to
Shine, namely: synchronisation barrier insertion, kernel execution, and storage
folding. The second research contribution is to demonstrate how extensibility
and controllability are exploited to optimise a standard image processing
pipeline for corner detection. The final research contribution is to introduce
sketch-guided equality saturation, a semi-automated technique that allows
performance engineers to guide program rewriting by specifying rewrite goals as
sketches: program patterns that leave details unspecified.
