[ARM] A predicate cast of a predicate cast is a predicate cast
[llvm-complete.git] / docs / tutorial / BuildingAJIT4.rst
blob3d3f81e438584b6d3271f3fe25c7694c56059246
1 ===========================================================================
2 Building a JIT: Extreme Laziness - Using Compile Callbacks to JIT from ASTs
3 ===========================================================================
5 .. contents::
6    :local:
8 **This tutorial is under active development. It is incomplete and details may
9 change frequently.** Nonetheless we invite you to try it out as it stands, and
10 we welcome any feedback.
12 Chapter 4 Introduction
13 ======================
15 Welcome to Chapter 4 of the "Building an ORC-based JIT in LLVM" tutorial. This
16 chapter introduces the Compile Callbacks and Indirect Stubs APIs and shows how
17 they can be used to replace the CompileOnDemand layer from
18 `Chapter 3 <BuildingAJIT3.html>`_ with a custom lazy-JITing scheme that JITs
19 directly from Kaleidoscope ASTs.
21 **To be done:**
23 **(1) Describe the drawbacks of JITing from IR (have to compile to IR first,
24 which reduces the benefits of laziness).**
26 **(2) Describe CompileCallbackManagers and IndirectStubManagers in detail.**
28 **(3) Run through the implementation of addFunctionAST.**
30 Full Code Listing
31 =================
33 Here is the complete code listing for our running example that JITs lazily from
34 Kaleidoscope ASTS. To build this example, use:
36 .. code-block:: bash
38     # Compile
39     clang++ -g toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core orcjit native` -O3 -o toy
40     # Run
41     ./toy
43 Here is the code:
45 .. literalinclude:: ../../examples/Kaleidoscope/BuildingAJIT/Chapter4/KaleidoscopeJIT.h
46    :language: c++
48 `Next: Remote-JITing -- Process-isolation and laziness-at-a-distance <BuildingAJIT5.html>`_