mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-24 12:20:00 +00:00
[MCJIT] Update MCJIT and get the fibonacci example working again.
MCJIT will now set the DataLayout on a module when it is added to the JIT, rather than waiting until it is codegen'd, and the runFunction method will finalize the module containing the function to be run before running it. The fibonacci example has been updated to include and link against MCJIT. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272455 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ff7edbe38c
commit
df424f76e5
@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS
|
||||
ExecutionEngine
|
||||
Interpreter
|
||||
MC
|
||||
MCJIT
|
||||
Support
|
||||
nativecodegen
|
||||
)
|
||||
|
@ -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.
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
// 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();
|
||||
|
Loading…
Reference in New Issue
Block a user