diff --git a/clang/examples/clang-interpreter/CMakeLists.txt b/clang/examples/clang-interpreter/CMakeLists.txt index 6d78408f8556..d454539fdac4 100644 --- a/clang/examples/clang-interpreter/CMakeLists.txt +++ b/clang/examples/clang-interpreter/CMakeLists.txt @@ -2,7 +2,9 @@ set(LLVM_LINK_COMPONENTS Core ExecutionEngine Interpreter + JIT Support + native ) add_clang_executable(clang-interpreter diff --git a/clang/examples/clang-interpreter/README.txt b/clang/examples/clang-interpreter/README.txt index b81d3813a1d3..7dd45fad5048 100644 --- a/clang/examples/clang-interpreter/README.txt +++ b/clang/examples/clang-interpreter/README.txt @@ -10,8 +10,7 @@ It demonstrates the following features: 3. Invoking the Clang compiler to lex, parse, syntax check, and then generate LLVM code. - 4. Use the LLVM interpreter functionality to execute the final module, with - guidance on how to extend the demo with JIT execution. + 4. Use the LLVM JIT functionality to execute the final module. The implementation has many limitations and is not designed to be a full fledged C interpreter. It is designed to demonstrate a simple but functional use of the diff --git a/clang/examples/clang-interpreter/main.cpp b/clang/examples/clang-interpreter/main.cpp index c255f51cee89..fb9d298f0ac9 100644 --- a/clang/examples/clang-interpreter/main.cpp +++ b/clang/examples/clang-interpreter/main.cpp @@ -18,6 +18,7 @@ #include "clang/Frontend/TextDiagnosticPrinter.h" #include "llvm/ADT/SmallString.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" +#include "llvm/ExecutionEngine/JIT.h" #include "llvm/IR/Module.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Host.h" @@ -42,12 +43,11 @@ std::string GetExecutablePath(const char *Argv0) { } static int Execute(llvm::Module *Mod, char * const *envp) { - // To JIT instead of interpreting, call llvm::InitializeNativeTarget() here - // and pass ForceInterpreter=false to ExecutionEngine::create(). + llvm::InitializeNativeTarget(); std::string Error; std::unique_ptr EE( - llvm::ExecutionEngine::create(Mod, /*ForceInterpreter*/ true, &Error)); + llvm::ExecutionEngine::create(Mod, /*ForceInterpreter*/ false, &Error)); if (!EE) { llvm::errs() << "unable to make execution engine: " << Error << "\n"; return 255;