Home | History | Annotate | Download | only in tutorial
      1 ==============================================
      2 Kaleidoscope: Adding JIT and Optimizer Support
      3 ==============================================
      4 
      5 .. contents::
      6    :local:
      7 
      8 Chapter 4 Introduction
      9 ======================
     10 
     11 Welcome to Chapter 4 of the "`Implementing a language with
     12 LLVM <index.html>`_" tutorial. Chapters 1-3 described the implementation
     13 of a simple language and added support for generating LLVM IR. This
     14 chapter describes two new techniques: adding optimizer support to your
     15 language, and adding JIT compiler support. These additions will
     16 demonstrate how to get nice, efficient code for the Kaleidoscope
     17 language.
     18 
     19 Trivial Constant Folding
     20 ========================
     21 
     22 Our demonstration for Chapter 3 is elegant and easy to extend.
     23 Unfortunately, it does not produce wonderful code. The IRBuilder,
     24 however, does give us obvious optimizations when compiling simple code:
     25 
     26 ::
     27 
     28     ready> def test(x) 1+2+x;
     29     Read function definition:
     30     define double @test(double %x) {
     31     entry:
     32             %addtmp = fadd double 3.000000e+00, %x
     33             ret double %addtmp
     34     }
     35 
     36 This code is not a literal transcription of the AST built by parsing the
     37 input. That would be:
     38 
     39 ::
     40 
     41     ready> def test(x) 1+2+x;
     42     Read function definition:
     43     define double @test(double %x) {
     44     entry:
     45             %addtmp = fadd double 2.000000e+00, 1.000000e+00
     46             %addtmp1 = fadd double %addtmp, %x
     47             ret double %addtmp1
     48     }
     49 
     50 Constant folding, as seen above, in particular, is a very common and
     51 very important optimization: so much so that many language implementors
     52 implement constant folding support in their AST representation.
     53 
     54 With LLVM, you don't need this support in the AST. Since all calls to
     55 build LLVM IR go through the LLVM IR builder, the builder itself checked
     56 to see if there was a constant folding opportunity when you call it. If
     57 so, it just does the constant fold and return the constant instead of
     58 creating an instruction.
     59 
     60 Well, that was easy :). In practice, we recommend always using
     61 ``IRBuilder`` when generating code like this. It has no "syntactic
     62 overhead" for its use (you don't have to uglify your compiler with
     63 constant checks everywhere) and it can dramatically reduce the amount of
     64 LLVM IR that is generated in some cases (particular for languages with a
     65 macro preprocessor or that use a lot of constants).
     66 
     67 On the other hand, the ``IRBuilder`` is limited by the fact that it does
     68 all of its analysis inline with the code as it is built. If you take a
     69 slightly more complex example:
     70 
     71 ::
     72 
     73     ready> def test(x) (1+2+x)*(x+(1+2));
     74     ready> Read function definition:
     75     define double @test(double %x) {
     76     entry:
     77             %addtmp = fadd double 3.000000e+00, %x
     78             %addtmp1 = fadd double %x, 3.000000e+00
     79             %multmp = fmul double %addtmp, %addtmp1
     80             ret double %multmp
     81     }
     82 
     83 In this case, the LHS and RHS of the multiplication are the same value.
     84 We'd really like to see this generate "``tmp = x+3; result = tmp*tmp;``"
     85 instead of computing "``x+3``" twice.
     86 
     87 Unfortunately, no amount of local analysis will be able to detect and
     88 correct this. This requires two transformations: reassociation of
     89 expressions (to make the add's lexically identical) and Common
     90 Subexpression Elimination (CSE) to delete the redundant add instruction.
     91 Fortunately, LLVM provides a broad range of optimizations that you can
     92 use, in the form of "passes".
     93 
     94 LLVM Optimization Passes
     95 ========================
     96 
     97 LLVM provides many optimization passes, which do many different sorts of
     98 things and have different tradeoffs. Unlike other systems, LLVM doesn't
     99 hold to the mistaken notion that one set of optimizations is right for
    100 all languages and for all situations. LLVM allows a compiler implementor
    101 to make complete decisions about what optimizations to use, in which
    102 order, and in what situation.
    103 
    104 As a concrete example, LLVM supports both "whole module" passes, which
    105 look across as large of body of code as they can (often a whole file,
    106 but if run at link time, this can be a substantial portion of the whole
    107 program). It also supports and includes "per-function" passes which just
    108 operate on a single function at a time, without looking at other
    109 functions. For more information on passes and how they are run, see the
    110 `How to Write a Pass <../WritingAnLLVMPass.html>`_ document and the
    111 `List of LLVM Passes <../Passes.html>`_.
    112 
    113 For Kaleidoscope, we are currently generating functions on the fly, one
    114 at a time, as the user types them in. We aren't shooting for the
    115 ultimate optimization experience in this setting, but we also want to
    116 catch the easy and quick stuff where possible. As such, we will choose
    117 to run a few per-function optimizations as the user types the function
    118 in. If we wanted to make a "static Kaleidoscope compiler", we would use
    119 exactly the code we have now, except that we would defer running the
    120 optimizer until the entire file has been parsed.
    121 
    122 In order to get per-function optimizations going, we need to set up a
    123 `FunctionPassManager <../WritingAnLLVMPass.html#passmanager>`_ to hold
    124 and organize the LLVM optimizations that we want to run. Once we have
    125 that, we can add a set of optimizations to run. The code looks like
    126 this:
    127 
    128 .. code-block:: c++
    129 
    130       FunctionPassManager OurFPM(TheModule);
    131 
    132       // Set up the optimizer pipeline.  Start with registering info about how the
    133       // target lays out data structures.
    134       OurFPM.add(new DataLayout(*TheExecutionEngine->getDataLayout()));
    135       // Provide basic AliasAnalysis support for GVN.
    136       OurFPM.add(createBasicAliasAnalysisPass());
    137       // Do simple "peephole" optimizations and bit-twiddling optzns.
    138       OurFPM.add(createInstructionCombiningPass());
    139       // Reassociate expressions.
    140       OurFPM.add(createReassociatePass());
    141       // Eliminate Common SubExpressions.
    142       OurFPM.add(createGVNPass());
    143       // Simplify the control flow graph (deleting unreachable blocks, etc).
    144       OurFPM.add(createCFGSimplificationPass());
    145 
    146       OurFPM.doInitialization();
    147 
    148       // Set the global so the code gen can use this.
    149       TheFPM = &OurFPM;
    150 
    151       // Run the main "interpreter loop" now.
    152       MainLoop();
    153 
    154 This code defines a ``FunctionPassManager``, "``OurFPM``". It requires a
    155 pointer to the ``Module`` to construct itself. Once it is set up, we use
    156 a series of "add" calls to add a bunch of LLVM passes. The first pass is
    157 basically boilerplate, it adds a pass so that later optimizations know
    158 how the data structures in the program are laid out. The
    159 "``TheExecutionEngine``" variable is related to the JIT, which we will
    160 get to in the next section.
    161 
    162 In this case, we choose to add 4 optimization passes. The passes we
    163 chose here are a pretty standard set of "cleanup" optimizations that are
    164 useful for a wide variety of code. I won't delve into what they do but,
    165 believe me, they are a good starting place :).
    166 
    167 Once the PassManager is set up, we need to make use of it. We do this by
    168 running it after our newly created function is constructed (in
    169 ``FunctionAST::Codegen``), but before it is returned to the client:
    170 
    171 .. code-block:: c++
    172 
    173       if (Value *RetVal = Body->Codegen()) {
    174         // Finish off the function.
    175         Builder.CreateRet(RetVal);
    176 
    177         // Validate the generated code, checking for consistency.
    178         verifyFunction(*TheFunction);
    179 
    180         // Optimize the function.
    181         TheFPM->run(*TheFunction);
    182 
    183         return TheFunction;
    184       }
    185 
    186 As you can see, this is pretty straightforward. The
    187 ``FunctionPassManager`` optimizes and updates the LLVM Function\* in
    188 place, improving (hopefully) its body. With this in place, we can try
    189 our test above again:
    190 
    191 ::
    192 
    193     ready> def test(x) (1+2+x)*(x+(1+2));
    194     ready> Read function definition:
    195     define double @test(double %x) {
    196     entry:
    197             %addtmp = fadd double %x, 3.000000e+00
    198             %multmp = fmul double %addtmp, %addtmp
    199             ret double %multmp
    200     }
    201 
    202 As expected, we now get our nicely optimized code, saving a floating
    203 point add instruction from every execution of this function.
    204 
    205 LLVM provides a wide variety of optimizations that can be used in
    206 certain circumstances. Some `documentation about the various
    207 passes <../Passes.html>`_ is available, but it isn't very complete.
    208 Another good source of ideas can come from looking at the passes that
    209 ``Clang`` runs to get started. The "``opt``" tool allows you to
    210 experiment with passes from the command line, so you can see if they do
    211 anything.
    212 
    213 Now that we have reasonable code coming out of our front-end, lets talk
    214 about executing it!
    215 
    216 Adding a JIT Compiler
    217 =====================
    218 
    219 Code that is available in LLVM IR can have a wide variety of tools
    220 applied to it. For example, you can run optimizations on it (as we did
    221 above), you can dump it out in textual or binary forms, you can compile
    222 the code to an assembly file (.s) for some target, or you can JIT
    223 compile it. The nice thing about the LLVM IR representation is that it
    224 is the "common currency" between many different parts of the compiler.
    225 
    226 In this section, we'll add JIT compiler support to our interpreter. The
    227 basic idea that we want for Kaleidoscope is to have the user enter
    228 function bodies as they do now, but immediately evaluate the top-level
    229 expressions they type in. For example, if they type in "1 + 2;", we
    230 should evaluate and print out 3. If they define a function, they should
    231 be able to call it from the command line.
    232 
    233 In order to do this, we first declare and initialize the JIT. This is
    234 done by adding a global variable and a call in ``main``:
    235 
    236 .. code-block:: c++
    237 
    238     static ExecutionEngine *TheExecutionEngine;
    239     ...
    240     int main() {
    241       ..
    242       // Create the JIT.  This takes ownership of the module.
    243       TheExecutionEngine = EngineBuilder(TheModule).create();
    244       ..
    245     }
    246 
    247 This creates an abstract "Execution Engine" which can be either a JIT
    248 compiler or the LLVM interpreter. LLVM will automatically pick a JIT
    249 compiler for you if one is available for your platform, otherwise it
    250 will fall back to the interpreter.
    251 
    252 Once the ``ExecutionEngine`` is created, the JIT is ready to be used.
    253 There are a variety of APIs that are useful, but the simplest one is the
    254 "``getPointerToFunction(F)``" method. This method JIT compiles the
    255 specified LLVM Function and returns a function pointer to the generated
    256 machine code. In our case, this means that we can change the code that
    257 parses a top-level expression to look like this:
    258 
    259 .. code-block:: c++
    260 
    261     static void HandleTopLevelExpression() {
    262       // Evaluate a top-level expression into an anonymous function.
    263       if (FunctionAST *F = ParseTopLevelExpr()) {
    264         if (Function *LF = F->Codegen()) {
    265           LF->dump();  // Dump the function for exposition purposes.
    266 
    267           // JIT the function, returning a function pointer.
    268           void *FPtr = TheExecutionEngine->getPointerToFunction(LF);
    269 
    270           // Cast it to the right type (takes no arguments, returns a double) so we
    271           // can call it as a native function.
    272           double (*FP)() = (double (*)())(intptr_t)FPtr;
    273           fprintf(stderr, "Evaluated to %f\n", FP());
    274         }
    275 
    276 Recall that we compile top-level expressions into a self-contained LLVM
    277 function that takes no arguments and returns the computed double.
    278 Because the LLVM JIT compiler matches the native platform ABI, this
    279 means that you can just cast the result pointer to a function pointer of
    280 that type and call it directly. This means, there is no difference
    281 between JIT compiled code and native machine code that is statically
    282 linked into your application.
    283 
    284 With just these two changes, lets see how Kaleidoscope works now!
    285 
    286 ::
    287 
    288     ready> 4+5;
    289     Read top-level expression:
    290     define double @0() {
    291     entry:
    292       ret double 9.000000e+00
    293     }
    294 
    295     Evaluated to 9.000000
    296 
    297 Well this looks like it is basically working. The dump of the function
    298 shows the "no argument function that always returns double" that we
    299 synthesize for each top-level expression that is typed in. This
    300 demonstrates very basic functionality, but can we do more?
    301 
    302 ::
    303 
    304     ready> def testfunc(x y) x + y*2;
    305     Read function definition:
    306     define double @testfunc(double %x, double %y) {
    307     entry:
    308       %multmp = fmul double %y, 2.000000e+00
    309       %addtmp = fadd double %multmp, %x
    310       ret double %addtmp
    311     }
    312 
    313     ready> testfunc(4, 10);
    314     Read top-level expression:
    315     define double @1() {
    316     entry:
    317       %calltmp = call double @testfunc(double 4.000000e+00, double 1.000000e+01)
    318       ret double %calltmp
    319     }
    320 
    321     Evaluated to 24.000000
    322 
    323 This illustrates that we can now call user code, but there is something
    324 a bit subtle going on here. Note that we only invoke the JIT on the
    325 anonymous functions that *call testfunc*, but we never invoked it on
    326 *testfunc* itself. What actually happened here is that the JIT scanned
    327 for all non-JIT'd functions transitively called from the anonymous
    328 function and compiled all of them before returning from
    329 ``getPointerToFunction()``.
    330 
    331 The JIT provides a number of other more advanced interfaces for things
    332 like freeing allocated machine code, rejit'ing functions to update them,
    333 etc. However, even with this simple code, we get some surprisingly
    334 powerful capabilities - check this out (I removed the dump of the
    335 anonymous functions, you should get the idea by now :) :
    336 
    337 ::
    338 
    339     ready> extern sin(x);
    340     Read extern:
    341     declare double @sin(double)
    342 
    343     ready> extern cos(x);
    344     Read extern:
    345     declare double @cos(double)
    346 
    347     ready> sin(1.0);
    348     Read top-level expression:
    349     define double @2() {
    350     entry:
    351       ret double 0x3FEAED548F090CEE
    352     }
    353 
    354     Evaluated to 0.841471
    355 
    356     ready> def foo(x) sin(x)*sin(x) + cos(x)*cos(x);
    357     Read function definition:
    358     define double @foo(double %x) {
    359     entry:
    360       %calltmp = call double @sin(double %x)
    361       %multmp = fmul double %calltmp, %calltmp
    362       %calltmp2 = call double @cos(double %x)
    363       %multmp4 = fmul double %calltmp2, %calltmp2
    364       %addtmp = fadd double %multmp, %multmp4
    365       ret double %addtmp
    366     }
    367 
    368     ready> foo(4.0);
    369     Read top-level expression:
    370     define double @3() {
    371     entry:
    372       %calltmp = call double @foo(double 4.000000e+00)
    373       ret double %calltmp
    374     }
    375 
    376     Evaluated to 1.000000
    377 
    378 Whoa, how does the JIT know about sin and cos? The answer is
    379 surprisingly simple: in this example, the JIT started execution of a
    380 function and got to a function call. It realized that the function was
    381 not yet JIT compiled and invoked the standard set of routines to resolve
    382 the function. In this case, there is no body defined for the function,
    383 so the JIT ended up calling "``dlsym("sin")``" on the Kaleidoscope
    384 process itself. Since "``sin``" is defined within the JIT's address
    385 space, it simply patches up calls in the module to call the libm version
    386 of ``sin`` directly.
    387 
    388 The LLVM JIT provides a number of interfaces (look in the
    389 ``ExecutionEngine.h`` file) for controlling how unknown functions get
    390 resolved. It allows you to establish explicit mappings between IR
    391 objects and addresses (useful for LLVM global variables that you want to
    392 map to static tables, for example), allows you to dynamically decide on
    393 the fly based on the function name, and even allows you to have the JIT
    394 compile functions lazily the first time they're called.
    395 
    396 One interesting application of this is that we can now extend the
    397 language by writing arbitrary C++ code to implement operations. For
    398 example, if we add:
    399 
    400 .. code-block:: c++
    401 
    402     /// putchard - putchar that takes a double and returns 0.
    403     extern "C"
    404     double putchard(double X) {
    405       putchar((char)X);
    406       return 0;
    407     }
    408 
    409 Now we can produce simple output to the console by using things like:
    410 "``extern putchard(x); putchard(120);``", which prints a lowercase 'x'
    411 on the console (120 is the ASCII code for 'x'). Similar code could be
    412 used to implement file I/O, console input, and many other capabilities
    413 in Kaleidoscope.
    414 
    415 This completes the JIT and optimizer chapter of the Kaleidoscope
    416 tutorial. At this point, we can compile a non-Turing-complete
    417 programming language, optimize and JIT compile it in a user-driven way.
    418 Next up we'll look into `extending the language with control flow
    419 constructs <LangImpl5.html>`_, tackling some interesting LLVM IR issues
    420 along the way.
    421 
    422 Full Code Listing
    423 =================
    424 
    425 Here is the complete code listing for our running example, enhanced with
    426 the LLVM JIT and optimizer. To build this example, use:
    427 
    428 .. code-block:: bash
    429 
    430     # Compile
    431     clang++ -g toy.cpp `llvm-config --cppflags --ldflags --libs core jit native` -O3 -o toy
    432     # Run
    433     ./toy
    434 
    435 If you are compiling this on Linux, make sure to add the "-rdynamic"
    436 option as well. This makes sure that the external functions are resolved
    437 properly at runtime.
    438 
    439 Here is the code:
    440 
    441 .. code-block:: c++
    442 
    443     #include "llvm/DerivedTypes.h"
    444     #include "llvm/ExecutionEngine/ExecutionEngine.h"
    445     #include "llvm/ExecutionEngine/JIT.h"
    446     #include "llvm/IRBuilder.h"
    447     #include "llvm/LLVMContext.h"
    448     #include "llvm/Module.h"
    449     #include "llvm/PassManager.h"
    450     #include "llvm/Analysis/Verifier.h"
    451     #include "llvm/Analysis/Passes.h"
    452     #include "llvm/DataLayout.h"
    453     #include "llvm/Transforms/Scalar.h"
    454     #include "llvm/Support/TargetSelect.h"
    455     #include <cstdio>
    456     #include <string>
    457     #include <map>
    458     #include <vector>
    459     using namespace llvm;
    460 
    461     //===----------------------------------------------------------------------===//
    462     // Lexer
    463     //===----------------------------------------------------------------------===//
    464 
    465     // The lexer returns tokens [0-255] if it is an unknown character, otherwise one
    466     // of these for known things.
    467     enum Token {
    468       tok_eof = -1,
    469 
    470       // commands
    471       tok_def = -2, tok_extern = -3,
    472 
    473       // primary
    474       tok_identifier = -4, tok_number = -5
    475     };
    476 
    477     static std::string IdentifierStr;  // Filled in if tok_identifier
    478     static double NumVal;              // Filled in if tok_number
    479 
    480     /// gettok - Return the next token from standard input.
    481     static int gettok() {
    482       static int LastChar = ' ';
    483 
    484       // Skip any whitespace.
    485       while (isspace(LastChar))
    486         LastChar = getchar();
    487 
    488       if (isalpha(LastChar)) { // identifier: [a-zA-Z][a-zA-Z0-9]*
    489         IdentifierStr = LastChar;
    490         while (isalnum((LastChar = getchar())))
    491           IdentifierStr += LastChar;
    492 
    493         if (IdentifierStr == "def") return tok_def;
    494         if (IdentifierStr == "extern") return tok_extern;
    495         return tok_identifier;
    496       }
    497 
    498       if (isdigit(LastChar) || LastChar == '.') {   // Number: [0-9.]+
    499         std::string NumStr;
    500         do {
    501           NumStr += LastChar;
    502           LastChar = getchar();
    503         } while (isdigit(LastChar) || LastChar == '.');
    504 
    505         NumVal = strtod(NumStr.c_str(), 0);
    506         return tok_number;
    507       }
    508 
    509       if (LastChar == '#') {
    510         // Comment until end of line.
    511         do LastChar = getchar();
    512         while (LastChar != EOF && LastChar != '\n' && LastChar != '\r');
    513 
    514         if (LastChar != EOF)
    515           return gettok();
    516       }
    517 
    518       // Check for end of file.  Don't eat the EOF.
    519       if (LastChar == EOF)
    520         return tok_eof;
    521 
    522       // Otherwise, just return the character as its ascii value.
    523       int ThisChar = LastChar;
    524       LastChar = getchar();
    525       return ThisChar;
    526     }
    527 
    528     //===----------------------------------------------------------------------===//
    529     // Abstract Syntax Tree (aka Parse Tree)
    530     //===----------------------------------------------------------------------===//
    531 
    532     /// ExprAST - Base class for all expression nodes.
    533     class ExprAST {
    534     public:
    535       virtual ~ExprAST() {}
    536       virtual Value *Codegen() = 0;
    537     };
    538 
    539     /// NumberExprAST - Expression class for numeric literals like "1.0".
    540     class NumberExprAST : public ExprAST {
    541       double Val;
    542     public:
    543       NumberExprAST(double val) : Val(val) {}
    544       virtual Value *Codegen();
    545     };
    546 
    547     /// VariableExprAST - Expression class for referencing a variable, like "a".
    548     class VariableExprAST : public ExprAST {
    549       std::string Name;
    550     public:
    551       VariableExprAST(const std::string &name) : Name(name) {}
    552       virtual Value *Codegen();
    553     };
    554 
    555     /// BinaryExprAST - Expression class for a binary operator.
    556     class BinaryExprAST : public ExprAST {
    557       char Op;
    558       ExprAST *LHS, *RHS;
    559     public:
    560       BinaryExprAST(char op, ExprAST *lhs, ExprAST *rhs)
    561         : Op(op), LHS(lhs), RHS(rhs) {}
    562       virtual Value *Codegen();
    563     };
    564 
    565     /// CallExprAST - Expression class for function calls.
    566     class CallExprAST : public ExprAST {
    567       std::string Callee;
    568       std::vector<ExprAST*> Args;
    569     public:
    570       CallExprAST(const std::string &callee, std::vector<ExprAST*> &args)
    571         : Callee(callee), Args(args) {}
    572       virtual Value *Codegen();
    573     };
    574 
    575     /// PrototypeAST - This class represents the "prototype" for a function,
    576     /// which captures its name, and its argument names (thus implicitly the number
    577     /// of arguments the function takes).
    578     class PrototypeAST {
    579       std::string Name;
    580       std::vector<std::string> Args;
    581     public:
    582       PrototypeAST(const std::string &name, const std::vector<std::string> &args)
    583         : Name(name), Args(args) {}
    584 
    585       Function *Codegen();
    586     };
    587 
    588     /// FunctionAST - This class represents a function definition itself.
    589     class FunctionAST {
    590       PrototypeAST *Proto;
    591       ExprAST *Body;
    592     public:
    593       FunctionAST(PrototypeAST *proto, ExprAST *body)
    594         : Proto(proto), Body(body) {}
    595 
    596       Function *Codegen();
    597     };
    598 
    599     //===----------------------------------------------------------------------===//
    600     // Parser
    601     //===----------------------------------------------------------------------===//
    602 
    603     /// CurTok/getNextToken - Provide a simple token buffer.  CurTok is the current
    604     /// token the parser is looking at.  getNextToken reads another token from the
    605     /// lexer and updates CurTok with its results.
    606     static int CurTok;
    607     static int getNextToken() {
    608       return CurTok = gettok();
    609     }
    610 
    611     /// BinopPrecedence - This holds the precedence for each binary operator that is
    612     /// defined.
    613     static std::map<char, int> BinopPrecedence;
    614 
    615     /// GetTokPrecedence - Get the precedence of the pending binary operator token.
    616     static int GetTokPrecedence() {
    617       if (!isascii(CurTok))
    618         return -1;
    619 
    620       // Make sure it's a declared binop.
    621       int TokPrec = BinopPrecedence[CurTok];
    622       if (TokPrec <= 0) return -1;
    623       return TokPrec;
    624     }
    625 
    626     /// Error* - These are little helper functions for error handling.
    627     ExprAST *Error(const char *Str) { fprintf(stderr, "Error: %s\n", Str);return 0;}
    628     PrototypeAST *ErrorP(const char *Str) { Error(Str); return 0; }
    629     FunctionAST *ErrorF(const char *Str) { Error(Str); return 0; }
    630 
    631     static ExprAST *ParseExpression();
    632 
    633     /// identifierexpr
    634     ///   ::= identifier
    635     ///   ::= identifier '(' expression* ')'
    636     static ExprAST *ParseIdentifierExpr() {
    637       std::string IdName = IdentifierStr;
    638 
    639       getNextToken();  // eat identifier.
    640 
    641       if (CurTok != '(') // Simple variable ref.
    642         return new VariableExprAST(IdName);
    643 
    644       // Call.
    645       getNextToken();  // eat (
    646       std::vector<ExprAST*> Args;
    647       if (CurTok != ')') {
    648         while (1) {
    649           ExprAST *Arg = ParseExpression();
    650           if (!Arg) return 0;
    651           Args.push_back(Arg);
    652 
    653           if (CurTok == ')') break;
    654 
    655           if (CurTok != ',')
    656             return Error("Expected ')' or ',' in argument list");
    657           getNextToken();
    658         }
    659       }
    660 
    661       // Eat the ')'.
    662       getNextToken();
    663 
    664       return new CallExprAST(IdName, Args);
    665     }
    666 
    667     /// numberexpr ::= number
    668     static ExprAST *ParseNumberExpr() {
    669       ExprAST *Result = new NumberExprAST(NumVal);
    670       getNextToken(); // consume the number
    671       return Result;
    672     }
    673 
    674     /// parenexpr ::= '(' expression ')'
    675     static ExprAST *ParseParenExpr() {
    676       getNextToken();  // eat (.
    677       ExprAST *V = ParseExpression();
    678       if (!V) return 0;
    679 
    680       if (CurTok != ')')
    681         return Error("expected ')'");
    682       getNextToken();  // eat ).
    683       return V;
    684     }
    685 
    686     /// primary
    687     ///   ::= identifierexpr
    688     ///   ::= numberexpr
    689     ///   ::= parenexpr
    690     static ExprAST *ParsePrimary() {
    691       switch (CurTok) {
    692       default: return Error("unknown token when expecting an expression");
    693       case tok_identifier: return ParseIdentifierExpr();
    694       case tok_number:     return ParseNumberExpr();
    695       case '(':            return ParseParenExpr();
    696       }
    697     }
    698 
    699     /// binoprhs
    700     ///   ::= ('+' primary)*
    701     static ExprAST *ParseBinOpRHS(int ExprPrec, ExprAST *LHS) {
    702       // If this is a binop, find its precedence.
    703       while (1) {
    704         int TokPrec = GetTokPrecedence();
    705 
    706         // If this is a binop that binds at least as tightly as the current binop,
    707         // consume it, otherwise we are done.
    708         if (TokPrec < ExprPrec)
    709           return LHS;
    710 
    711         // Okay, we know this is a binop.
    712         int BinOp = CurTok;
    713         getNextToken();  // eat binop
    714 
    715         // Parse the primary expression after the binary operator.
    716         ExprAST *RHS = ParsePrimary();
    717         if (!RHS) return 0;
    718 
    719         // If BinOp binds less tightly with RHS than the operator after RHS, let
    720         // the pending operator take RHS as its LHS.
    721         int NextPrec = GetTokPrecedence();
    722         if (TokPrec < NextPrec) {
    723           RHS = ParseBinOpRHS(TokPrec+1, RHS);
    724           if (RHS == 0) return 0;
    725         }
    726 
    727         // Merge LHS/RHS.
    728         LHS = new BinaryExprAST(BinOp, LHS, RHS);
    729       }
    730     }
    731 
    732     /// expression
    733     ///   ::= primary binoprhs
    734     ///
    735     static ExprAST *ParseExpression() {
    736       ExprAST *LHS = ParsePrimary();
    737       if (!LHS) return 0;
    738 
    739       return ParseBinOpRHS(0, LHS);
    740     }
    741 
    742     /// prototype
    743     ///   ::= id '(' id* ')'
    744     static PrototypeAST *ParsePrototype() {
    745       if (CurTok != tok_identifier)
    746         return ErrorP("Expected function name in prototype");
    747 
    748       std::string FnName = IdentifierStr;
    749       getNextToken();
    750 
    751       if (CurTok != '(')
    752         return ErrorP("Expected '(' in prototype");
    753 
    754       std::vector<std::string> ArgNames;
    755       while (getNextToken() == tok_identifier)
    756         ArgNames.push_back(IdentifierStr);
    757       if (CurTok != ')')
    758         return ErrorP("Expected ')' in prototype");
    759 
    760       // success.
    761       getNextToken();  // eat ')'.
    762 
    763       return new PrototypeAST(FnName, ArgNames);
    764     }
    765 
    766     /// definition ::= 'def' prototype expression
    767     static FunctionAST *ParseDefinition() {
    768       getNextToken();  // eat def.
    769       PrototypeAST *Proto = ParsePrototype();
    770       if (Proto == 0) return 0;
    771 
    772       if (ExprAST *E = ParseExpression())
    773         return new FunctionAST(Proto, E);
    774       return 0;
    775     }
    776 
    777     /// toplevelexpr ::= expression
    778     static FunctionAST *ParseTopLevelExpr() {
    779       if (ExprAST *E = ParseExpression()) {
    780         // Make an anonymous proto.
    781         PrototypeAST *Proto = new PrototypeAST("", std::vector<std::string>());
    782         return new FunctionAST(Proto, E);
    783       }
    784       return 0;
    785     }
    786 
    787     /// external ::= 'extern' prototype
    788     static PrototypeAST *ParseExtern() {
    789       getNextToken();  // eat extern.
    790       return ParsePrototype();
    791     }
    792 
    793     //===----------------------------------------------------------------------===//
    794     // Code Generation
    795     //===----------------------------------------------------------------------===//
    796 
    797     static Module *TheModule;
    798     static IRBuilder<> Builder(getGlobalContext());
    799     static std::map<std::string, Value*> NamedValues;
    800     static FunctionPassManager *TheFPM;
    801 
    802     Value *ErrorV(const char *Str) { Error(Str); return 0; }
    803 
    804     Value *NumberExprAST::Codegen() {
    805       return ConstantFP::get(getGlobalContext(), APFloat(Val));
    806     }
    807 
    808     Value *VariableExprAST::Codegen() {
    809       // Look this variable up in the function.
    810       Value *V = NamedValues[Name];
    811       return V ? V : ErrorV("Unknown variable name");
    812     }
    813 
    814     Value *BinaryExprAST::Codegen() {
    815       Value *L = LHS->Codegen();
    816       Value *R = RHS->Codegen();
    817       if (L == 0 || R == 0) return 0;
    818 
    819       switch (Op) {
    820       case '+': return Builder.CreateFAdd(L, R, "addtmp");
    821       case '-': return Builder.CreateFSub(L, R, "subtmp");
    822       case '*': return Builder.CreateFMul(L, R, "multmp");
    823       case '<':
    824         L = Builder.CreateFCmpULT(L, R, "cmptmp");
    825         // Convert bool 0/1 to double 0.0 or 1.0
    826         return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
    827                                     "booltmp");
    828       default: return ErrorV("invalid binary operator");
    829       }
    830     }
    831 
    832     Value *CallExprAST::Codegen() {
    833       // Look up the name in the global module table.
    834       Function *CalleeF = TheModule->getFunction(Callee);
    835       if (CalleeF == 0)
    836         return ErrorV("Unknown function referenced");
    837 
    838       // If argument mismatch error.
    839       if (CalleeF->arg_size() != Args.size())
    840         return ErrorV("Incorrect # arguments passed");
    841 
    842       std::vector<Value*> ArgsV;
    843       for (unsigned i = 0, e = Args.size(); i != e; ++i) {
    844         ArgsV.push_back(Args[i]->Codegen());
    845         if (ArgsV.back() == 0) return 0;
    846       }
    847 
    848       return Builder.CreateCall(CalleeF, ArgsV, "calltmp");
    849     }
    850 
    851     Function *PrototypeAST::Codegen() {
    852       // Make the function type:  double(double,double) etc.
    853       std::vector<Type*> Doubles(Args.size(),
    854                                  Type::getDoubleTy(getGlobalContext()));
    855       FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),
    856                                            Doubles, false);
    857 
    858       Function *F = Function::Create(FT, Function::ExternalLinkage, Name, TheModule);
    859 
    860       // If F conflicted, there was already something named 'Name'.  If it has a
    861       // body, don't allow redefinition or reextern.
    862       if (F->getName() != Name) {
    863         // Delete the one we just made and get the existing one.
    864         F->eraseFromParent();
    865         F = TheModule->getFunction(Name);
    866 
    867         // If F already has a body, reject this.
    868         if (!F->empty()) {
    869           ErrorF("redefinition of function");
    870           return 0;
    871         }
    872 
    873         // If F took a different number of args, reject.
    874         if (F->arg_size() != Args.size()) {
    875           ErrorF("redefinition of function with different # args");
    876           return 0;
    877         }
    878       }
    879 
    880       // Set names for all arguments.
    881       unsigned Idx = 0;
    882       for (Function::arg_iterator AI = F->arg_begin(); Idx != Args.size();
    883            ++AI, ++Idx) {
    884         AI->setName(Args[Idx]);
    885 
    886         // Add arguments to variable symbol table.
    887         NamedValues[Args[Idx]] = AI;
    888       }
    889 
    890       return F;
    891     }
    892 
    893     Function *FunctionAST::Codegen() {
    894       NamedValues.clear();
    895 
    896       Function *TheFunction = Proto->Codegen();
    897       if (TheFunction == 0)
    898         return 0;
    899 
    900       // Create a new basic block to start insertion into.
    901       BasicBlock *BB = BasicBlock::Create(getGlobalContext(), "entry", TheFunction);
    902       Builder.SetInsertPoint(BB);
    903 
    904       if (Value *RetVal = Body->Codegen()) {
    905         // Finish off the function.
    906         Builder.CreateRet(RetVal);
    907 
    908         // Validate the generated code, checking for consistency.
    909         verifyFunction(*TheFunction);
    910 
    911         // Optimize the function.
    912         TheFPM->run(*TheFunction);
    913 
    914         return TheFunction;
    915       }
    916 
    917       // Error reading body, remove function.
    918       TheFunction->eraseFromParent();
    919       return 0;
    920     }
    921 
    922     //===----------------------------------------------------------------------===//
    923     // Top-Level parsing and JIT Driver
    924     //===----------------------------------------------------------------------===//
    925 
    926     static ExecutionEngine *TheExecutionEngine;
    927 
    928     static void HandleDefinition() {
    929       if (FunctionAST *F = ParseDefinition()) {
    930         if (Function *LF = F->Codegen()) {
    931           fprintf(stderr, "Read function definition:");
    932           LF->dump();
    933         }
    934       } else {
    935         // Skip token for error recovery.
    936         getNextToken();
    937       }
    938     }
    939 
    940     static void HandleExtern() {
    941       if (PrototypeAST *P = ParseExtern()) {
    942         if (Function *F = P->Codegen()) {
    943           fprintf(stderr, "Read extern: ");
    944           F->dump();
    945         }
    946       } else {
    947         // Skip token for error recovery.
    948         getNextToken();
    949       }
    950     }
    951 
    952     static void HandleTopLevelExpression() {
    953       // Evaluate a top-level expression into an anonymous function.
    954       if (FunctionAST *F = ParseTopLevelExpr()) {
    955         if (Function *LF = F->Codegen()) {
    956           fprintf(stderr, "Read top-level expression:");
    957           LF->dump();
    958 
    959           // JIT the function, returning a function pointer.
    960           void *FPtr = TheExecutionEngine->getPointerToFunction(LF);
    961 
    962           // Cast it to the right type (takes no arguments, returns a double) so we
    963           // can call it as a native function.
    964           double (*FP)() = (double (*)())(intptr_t)FPtr;
    965           fprintf(stderr, "Evaluated to %f\n", FP());
    966         }
    967       } else {
    968         // Skip token for error recovery.
    969         getNextToken();
    970       }
    971     }
    972 
    973     /// top ::= definition | external | expression | ';'
    974     static void MainLoop() {
    975       while (1) {
    976         fprintf(stderr, "ready> ");
    977         switch (CurTok) {
    978         case tok_eof:    return;
    979         case ';':        getNextToken(); break;  // ignore top-level semicolons.
    980         case tok_def:    HandleDefinition(); break;
    981         case tok_extern: HandleExtern(); break;
    982         default:         HandleTopLevelExpression(); break;
    983         }
    984       }
    985     }
    986 
    987     //===----------------------------------------------------------------------===//
    988     // "Library" functions that can be "extern'd" from user code.
    989     //===----------------------------------------------------------------------===//
    990 
    991     /// putchard - putchar that takes a double and returns 0.
    992     extern "C"
    993     double putchard(double X) {
    994       putchar((char)X);
    995       return 0;
    996     }
    997 
    998     //===----------------------------------------------------------------------===//
    999     // Main driver code.
   1000     //===----------------------------------------------------------------------===//
   1001 
   1002     int main() {
   1003       InitializeNativeTarget();
   1004       LLVMContext &Context = getGlobalContext();
   1005 
   1006       // Install standard binary operators.
   1007       // 1 is lowest precedence.
   1008       BinopPrecedence['<'] = 10;
   1009       BinopPrecedence['+'] = 20;
   1010       BinopPrecedence['-'] = 20;
   1011       BinopPrecedence['*'] = 40;  // highest.
   1012 
   1013       // Prime the first token.
   1014       fprintf(stderr, "ready> ");
   1015       getNextToken();
   1016 
   1017       // Make the module, which holds all the code.
   1018       TheModule = new Module("my cool jit", Context);
   1019 
   1020       // Create the JIT.  This takes ownership of the module.
   1021       std::string ErrStr;
   1022       TheExecutionEngine = EngineBuilder(TheModule).setErrorStr(&ErrStr).create();
   1023       if (!TheExecutionEngine) {
   1024         fprintf(stderr, "Could not create ExecutionEngine: %s\n", ErrStr.c_str());
   1025         exit(1);
   1026       }
   1027 
   1028       FunctionPassManager OurFPM(TheModule);
   1029 
   1030       // Set up the optimizer pipeline.  Start with registering info about how the
   1031       // target lays out data structures.
   1032       OurFPM.add(new DataLayout(*TheExecutionEngine->getDataLayout()));
   1033       // Provide basic AliasAnalysis support for GVN.
   1034       OurFPM.add(createBasicAliasAnalysisPass());
   1035       // Do simple "peephole" optimizations and bit-twiddling optzns.
   1036       OurFPM.add(createInstructionCombiningPass());
   1037       // Reassociate expressions.
   1038       OurFPM.add(createReassociatePass());
   1039       // Eliminate Common SubExpressions.
   1040       OurFPM.add(createGVNPass());
   1041       // Simplify the control flow graph (deleting unreachable blocks, etc).
   1042       OurFPM.add(createCFGSimplificationPass());
   1043 
   1044       OurFPM.doInitialization();
   1045 
   1046       // Set the global so the code gen can use this.
   1047       TheFPM = &OurFPM;
   1048 
   1049       // Run the main "interpreter loop" now.
   1050       MainLoop();
   1051 
   1052       TheFPM = 0;
   1053 
   1054       // Print out all of the generated code.
   1055       TheModule->dump();
   1056 
   1057       return 0;
   1058     }
   1059 
   1060 `Next: Extending the language: control flow <LangImpl5.html>`_
   1061 
   1062