Tutorial# Tutorial part 1: “Hello world” Tutorial part 2: Creating a trivial machine code function Error-handling Options Full example Tutorial part 3: Loops and variables Expressions: lvalues and rvalues Control flow Visualizing the control flow graph Full example Tutorial part 4: Adding JIT-compilation to a toy interpreter Our toy interpreter Compiling to machine code Setting things up Populating the function Verifying the control flow graph Compiling the context Single-stepping through the generated code Examining the generated code Putting it all together Behind the curtain: How does our code get optimized? Tutorial part 5: Implementing an Ahead-of-Time compiler The “brainf” language Converting a brainf script to libgccjit IR Compiling a context to a file Other forms of ahead-of-time-compilation