Enabling incremental bytecode loading in the JIT:

* The VM is now constructed with a ModuleProvider


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9125 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Misha Brukman
2003-10-14 21:37:41 +00:00
parent 7b2b40f9ac
commit 005e5e9a48
4 changed files with 17 additions and 9 deletions
+10 -5
View File
@@ -45,7 +45,7 @@ namespace {
/// create - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise, return null.
///
ExecutionEngine *VM::create(Module *M) {
ExecutionEngine *VM::create(ModuleProvider *MP) {
TargetMachine* (*TargetMachineAllocator)(const Module &) = 0;
// Allow a command-line switch to override what *should* be the default target
@@ -71,14 +71,16 @@ ExecutionEngine *VM::create(Module *M) {
}
// Allocate a target...
TargetMachine *Target = TargetMachineAllocator(*M);
TargetMachine *Target = TargetMachineAllocator(*(MP->getModule()));
assert(Target && "Could not allocate target machine!");
// Create the virtual machine object...
return new VM(M, Target);
return new VM(MP, Target);
}
VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) {
VM::VM(ModuleProvider *MP, TargetMachine *tm) : ExecutionEngine(MP), TM(*tm),
PM(MP)
{
setTargetData(TM.getTargetData());
// Initialize MCE
@@ -94,7 +96,10 @@ VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) {
// Specialize LLVM code for this target machine and then
// run basic dataflow optimizations on LLVM code.
PM.add(createPreSelectionPass(TM));
PM.run(*M);
// We cannot utilize function-at-a-time loading here because PreSelection
// is a ModulePass.
MP->materializeModule();
PM.run(*(MP->getModule()));
}
#endif