Book Image

LLVM Cookbook

Book Image

LLVM Cookbook

Overview of this book

Table of Contents (16 chapters)
LLVM Cookbook
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

Adding JIT support


A wide variety of tools can be applied to LLVM IR. For example, as demonstrated in Chapter 1, LLVM Design and Use, the IR can be dumped into bitcode or into an assembly. An optimization tool called opt can be run on IR. IR acts as the common platform—an abstract layer for all of these tools.

JIT support can also be added. It immediately evaluates the top-level expressions typed in. For example, 1 + 2;, as soon as it is typed in, evaluates the code and prints the value as 3.

How to do it...

Do the following steps:

  1. Define a static global variable for the execution engine in the toy.cpp file:

    static ExecutionEngine *TheExecutionEngine;
  2. In the toy.cpp file's main() function, write the code for JIT:

    int main() {
    …
    …
    init_precedence();
    TheExecutionEngine = EngineBuilder(TheModule).create();
    …
    …
    }
  3. Modify the top-level expression parser in the toy.cpp file:

    static void HandleTopExpression() {
    
    if (FunctionDefAST *F = expression_parser())
       if (Function *LF = F->Codegen()) {
          ...