//
// The LLVM Compiler Infrastructure
//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
std::vector<const GlobalVariable*> PendingGlobals;
public:
- JITState(ModuleProvider *MP) : PM(MP) {}
+ explicit JITState(ModuleProvider *MP) : PM(MP) {}
- FunctionPassManager& getPM(const MutexGuard& locked) {
+ FunctionPassManager &getPM(const MutexGuard &L) {
return PM;
}
- std::vector<const GlobalVariable*>& getPendingGlobals(const MutexGuard& locked) {
+ std::vector<const GlobalVariable*> &getPendingGlobals(const MutexGuard &L) {
return PendingGlobals;
}
};
TargetJITInfo &TJI; // The JITInfo for the target we are compiling to
MachineCodeEmitter *MCE; // MCE object
- JITState state;
+ JITState *jitstate;
- JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji);
+ JIT(ModuleProvider *MP, TargetMachine &tm, TargetJITInfo &tji,
+ JITMemoryManager *JMM);
public:
~JIT();
/// create - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise, return null.
///
- static ExecutionEngine *create(ModuleProvider *MP);
+ static ExecutionEngine *create(ModuleProvider *MP, std::string *Err) {
+ return createJIT(MP, Err, 0);
+ }
+
+ virtual void addModuleProvider(ModuleProvider *MP);
+ virtual Module *removeModuleProvider(ModuleProvider *MP,
+ std::string *ErrInfo = 0);
/// run - Start execution with the specified function and arguments.
///
///
void freeMachineCodeForFunction(Function *F);
+ /// getCodeEmitter - Return the code emitter this JIT is emitting into.
+ MachineCodeEmitter *getCodeEmitter() const { return MCE; }
+
+ static ExecutionEngine *createJIT(ModuleProvider *MP, std::string *Err,
+ JITMemoryManager *JMM);
+
private:
- static MachineCodeEmitter *createEmitter(JIT &J);
+ static MachineCodeEmitter *createEmitter(JIT &J, JITMemoryManager *JMM);
void runJITOnFunction (Function *F);
};