49 lines · plain
1=======================================================================2Building a JIT: Extreme Laziness - Using LazyReexports to JIT from ASTs3=======================================================================4 5.. contents::6 :local:7 8**This tutorial is under active development. It is incomplete and details may9change frequently.** Nonetheless we invite you to try it out as it stands, and10we welcome any feedback.11 12Chapter 4 Introduction13======================14 15Welcome to Chapter 4 of the "Building an ORC-based JIT in LLVM" tutorial. This16chapter introduces custom MaterializationUnits and Layers, and the lazy17reexports API. Together these will be used to replace the CompileOnDemandLayer18from `Chapter 3 <BuildingAJIT3.html>`_ with a custom lazy-JITing scheme that JITs19directly from Kaleidoscope ASTs.20 21**To be done:**22 23**(1) Describe the drawbacks of JITing from IR (have to compile to IR first,24which reduces the benefits of laziness).**25 26**(2) Describe CompileCallbackManagers and IndirectStubManagers in detail.**27 28**(3) Run through the implementation of addFunctionAST.**29 30Full Code Listing31=================32 33Here is the complete code listing for our running example that JITs lazily from34Kaleidoscope ASTS. To build this example, use:35 36.. code-block:: bash37 38 # Compile39 clang++ -g toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core orcjit native` -O3 -o toy40 # Run41 ./toy42 43Here is the code:44 45.. literalinclude:: ../../examples/Kaleidoscope/BuildingAJIT/Chapter4/KaleidoscopeJIT.h46 :language: c++47 48`Next: Remote-JITing -- Process-isolation and laziness-at-a-distance <BuildingAJIT5.html>`_49