diff options
-rw-r--r-- | llvm/examples/Fibonacci/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/examples/Fibonacci/fibonacci.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 14 |
3 files changed, 12 insertions, 5 deletions
diff --git a/llvm/examples/Fibonacci/CMakeLists.txt b/llvm/examples/Fibonacci/CMakeLists.txt index 087ccdd7d84..e294a252375 100644 --- a/llvm/examples/Fibonacci/CMakeLists.txt +++ b/llvm/examples/Fibonacci/CMakeLists.txt @@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS ExecutionEngine Interpreter MC + MCJIT Support nativecodegen ) diff --git a/llvm/examples/Fibonacci/fibonacci.cpp b/llvm/examples/Fibonacci/fibonacci.cpp index 01f6d01fb19..16e52bf0409 100644 --- a/llvm/examples/Fibonacci/fibonacci.cpp +++ b/llvm/examples/Fibonacci/fibonacci.cpp @@ -27,6 +27,7 @@ #include "llvm/IR/Verifier.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/GenericValue.h" +#include "llvm/ExecutionEngine/MCJIT.h" #include "llvm/IR/Argument.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Constants.h" @@ -103,6 +104,7 @@ int main(int argc, char **argv) { int n = argc > 1 ? atol(argv[1]) : 24; InitializeNativeTarget(); + InitializeNativeTargetAsmPrinter(); LLVMContext Context; // Create some module to put our function into it. diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 55c7ff08d2e..30f18db0a46 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -85,6 +85,9 @@ MCJIT::MCJIT(std::unique_ptr<Module> M, std::unique_ptr<TargetMachine> TM, std::unique_ptr<Module> First = std::move(Modules[0]); Modules.clear(); + if (First->getDataLayout().isDefault()) + First->setDataLayout(getDataLayout()); + OwnedModules.addModule(std::move(First)); RegisterJITEventListener(JITEventListener::createGDBRegistrationListener()); } @@ -103,6 +106,10 @@ MCJIT::~MCJIT() { void MCJIT::addModule(std::unique_ptr<Module> M) { MutexGuard locked(lock); + + if (M->getDataLayout().isDefault()) + M->setDataLayout(getDataLayout()); + OwnedModules.addModule(std::move(M)); } @@ -192,11 +199,7 @@ void MCJIT::generateCodeForModule(Module *M) { if (ObjCache) ObjectToLoad = ObjCache->getObject(M); - if (M->getDataLayout().isDefault()) { - M->setDataLayout(getDataLayout()); - } else { - assert(M->getDataLayout() == getDataLayout() && "DataLayout Mismatch"); - } + assert(M->getDataLayout() == getDataLayout() && "DataLayout Mismatch"); // If the cache did not contain a suitable object, compile the object if (!ObjectToLoad) { @@ -490,6 +493,7 @@ GenericValue MCJIT::runFunction(Function *F, ArrayRef<GenericValue> ArgValues) { assert(F && "Function *F was null at entry to run()"); void *FPtr = getPointerToFunction(F); + finalizeModule(F->getParent()); assert(FPtr && "Pointer to fn's code was null after getPointerToFunction"); FunctionType *FTy = F->getFunctionType(); Type *RetTy = FTy->getReturnType(); |