diff options
| author | Alp Toker <alp@nuanti.com> | 2014-07-01 02:41:55 +0000 |
|---|---|---|
| committer | Alp Toker <alp@nuanti.com> | 2014-07-01 02:41:55 +0000 |
| commit | 475f282b5ddb18fc4a6c96eddff28ba691c9fdc2 (patch) | |
| tree | 4c892ea348f80f07a44ea80f33c1a7a008a0f294 /clang/examples | |
| parent | c0fda339e2c7b93316b24923131a145fbf81bace (diff) | |
| download | bcm5719-llvm-475f282b5ddb18fc4a6c96eddff28ba691c9fdc2.tar.gz bcm5719-llvm-475f282b5ddb18fc4a6c96eddff28ba691c9fdc2.zip | |
clang-interpreter: interpret instead of JITing
Fixes the build when no targets are selected, or no native target is built.
This also better matches up with the description/title of the example and
demonstrates how clang can be used to run C++ on constrained environments
without file IO or executable memory permissions (e.g. iOS apps).
A comment is added explaining how to extend the demo with JIT support as
needed.
llvm-svn: 212083
Diffstat (limited to 'clang/examples')
| -rw-r--r-- | clang/examples/clang-interpreter/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | clang/examples/clang-interpreter/README.txt | 3 | ||||
| -rw-r--r-- | clang/examples/clang-interpreter/main.cpp | 6 |
3 files changed, 6 insertions, 6 deletions
diff --git a/clang/examples/clang-interpreter/CMakeLists.txt b/clang/examples/clang-interpreter/CMakeLists.txt index 10df7e7e060..6d78408f855 100644 --- a/clang/examples/clang-interpreter/CMakeLists.txt +++ b/clang/examples/clang-interpreter/CMakeLists.txt @@ -1,9 +1,8 @@ set(LLVM_LINK_COMPONENTS Core ExecutionEngine - JIT + Interpreter Support - nativecodegen ) add_clang_executable(clang-interpreter diff --git a/clang/examples/clang-interpreter/README.txt b/clang/examples/clang-interpreter/README.txt index 7dd45fad504..b81d3813a1d 100644 --- a/clang/examples/clang-interpreter/README.txt +++ b/clang/examples/clang-interpreter/README.txt @@ -10,7 +10,8 @@ It demonstrates the following features: 3. Invoking the Clang compiler to lex, parse, syntax check, and then generate LLVM code. - 4. Use the LLVM JIT functionality to execute the final module. + 4. Use the LLVM interpreter functionality to execute the final module, with + guidance on how to extend the demo with JIT execution. 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 0f083c15143..c255f51cee8 100644 --- a/clang/examples/clang-interpreter/main.cpp +++ b/clang/examples/clang-interpreter/main.cpp @@ -18,7 +18,6 @@ #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" @@ -43,11 +42,12 @@ std::string GetExecutablePath(const char *Argv0) { } static int Execute(llvm::Module *Mod, char * const *envp) { - llvm::InitializeNativeTarget(); + // To JIT instead of interpreting, call llvm::InitializeNativeTarget() here + // and pass ForceInterpreter=false to ExecutionEngine::create(). std::string Error; std::unique_ptr<llvm::ExecutionEngine> EE( - llvm::ExecutionEngine::createJIT(Mod, &Error)); + llvm::ExecutionEngine::create(Mod, /*ForceInterpreter*/ true, &Error)); if (!EE) { llvm::errs() << "unable to make execution engine: " << Error << "\n"; return 255; |

