r212087 - clang-interpreter: use LLVM interpreter if JIT is unavailable
Alp Toker
alp at nuanti.com
Mon Jun 30 20:19:50 PDT 2014
Author: alp
Date: Mon Jun 30 22:19:50 2014
New Revision: 212087
URL: http://llvm.org/viewvc/llvm-project?rev=212087&view=rev
Log:
clang-interpreter: use LLVM interpreter if JIT is unavailable
Update the strategy in r212083 to try JIT first and otherwise fall back to the
interpreter. This gives the best of both worlds and still builds fine with no
targets enabled.
Requires supporting changes from LLVM r212086.
Modified:
cfe/trunk/examples/clang-interpreter/CMakeLists.txt
cfe/trunk/examples/clang-interpreter/README.txt
cfe/trunk/examples/clang-interpreter/main.cpp
Modified: cfe/trunk/examples/clang-interpreter/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/CMakeLists.txt?rev=212087&r1=212086&r2=212087&view=diff
==============================================================================
--- cfe/trunk/examples/clang-interpreter/CMakeLists.txt (original)
+++ cfe/trunk/examples/clang-interpreter/CMakeLists.txt Mon Jun 30 22:19:50 2014
@@ -2,7 +2,9 @@ set(LLVM_LINK_COMPONENTS
Core
ExecutionEngine
Interpreter
+ JIT
Support
+ native
)
add_clang_executable(clang-interpreter
Modified: cfe/trunk/examples/clang-interpreter/README.txt
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/README.txt?rev=212087&r1=212086&r2=212087&view=diff
==============================================================================
--- cfe/trunk/examples/clang-interpreter/README.txt (original)
+++ cfe/trunk/examples/clang-interpreter/README.txt Mon Jun 30 22:19:50 2014
@@ -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
Modified: cfe/trunk/examples/clang-interpreter/main.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/clang-interpreter/main.cpp?rev=212087&r1=212086&r2=212087&view=diff
==============================================================================
--- cfe/trunk/examples/clang-interpreter/main.cpp (original)
+++ cfe/trunk/examples/clang-interpreter/main.cpp Mon Jun 30 22:19:50 2014
@@ -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
}
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<llvm::ExecutionEngine> 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;
More information about the cfe-commits
mailing list