mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Add support for deleting a module provider from a JIT in such a way that it does not cause the owned module to be fully materialized.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62864 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
80303aade2
commit
60789e419e
@ -143,10 +143,16 @@ public:
|
||||
|
||||
|
||||
/// removeModuleProvider - Remove a ModuleProvider from the list of modules.
|
||||
/// Release module from ModuleProvider.
|
||||
/// Relases the Module from the ModuleProvider, materializing it in the
|
||||
/// process, and returns the materialized Module.
|
||||
virtual Module* removeModuleProvider(ModuleProvider *P,
|
||||
std::string *ErrInfo = 0);
|
||||
|
||||
/// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
|
||||
/// and deletes the ModuleProvider and owned Module. Avoids materializing
|
||||
/// the underlying module.
|
||||
virtual void deleteModuleProvider(ModuleProvider *P,std::string *ErrInfo = 0);
|
||||
|
||||
/// FindFunctionNamed - Search all of the active modules to find the one that
|
||||
/// defines FnName. This is very slow operation and shouldn't be used for
|
||||
/// general code.
|
||||
|
@ -59,7 +59,8 @@ char* ExecutionEngine::getMemoryForGV(const GlobalVariable* GV) {
|
||||
}
|
||||
|
||||
/// removeModuleProvider - Remove a ModuleProvider from the list of modules.
|
||||
/// Release module from ModuleProvider.
|
||||
/// Relases the Module from the ModuleProvider, materializing it in the
|
||||
/// process, and returns the materialized Module.
|
||||
Module* ExecutionEngine::removeModuleProvider(ModuleProvider *P,
|
||||
std::string *ErrInfo) {
|
||||
for(SmallVector<ModuleProvider *, 1>::iterator I = Modules.begin(),
|
||||
@ -74,6 +75,23 @@ Module* ExecutionEngine::removeModuleProvider(ModuleProvider *P,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
|
||||
/// and deletes the ModuleProvider and owned Module. Avoids materializing
|
||||
/// the underlying module.
|
||||
void ExecutionEngine::deleteModuleProvider(ModuleProvider *P,
|
||||
std::string *ErrInfo) {
|
||||
for(SmallVector<ModuleProvider *, 1>::iterator I = Modules.begin(),
|
||||
E = Modules.end(); I != E; ++I) {
|
||||
ModuleProvider *MP = *I;
|
||||
if (MP == P) {
|
||||
Modules.erase(I);
|
||||
clearGlobalMappingsFromModule(MP->getModule());
|
||||
delete MP;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// FindFunctionNamed - Search all of the active modules to find the one that
|
||||
/// defines FnName. This is very slow operation and shouldn't be used for
|
||||
/// general code.
|
||||
|
@ -297,6 +297,19 @@ Module *JIT::removeModuleProvider(ModuleProvider *MP, std::string *E) {
|
||||
return result;
|
||||
}
|
||||
|
||||
/// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
|
||||
/// and deletes the ModuleProvider and owned Module. Avoids materializing
|
||||
/// the underlying module.
|
||||
void JIT::deleteModuleProvider(ModuleProvider *MP, std::string *E) {
|
||||
ExecutionEngine::deleteModuleProvider(MP, E);
|
||||
|
||||
MutexGuard locked(lock);
|
||||
if (Modules.empty()) {
|
||||
delete jitstate;
|
||||
jitstate = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// run - Start execution with the specified function and arguments.
|
||||
///
|
||||
GenericValue JIT::runFunction(Function *F,
|
||||
|
@ -77,9 +77,18 @@ public:
|
||||
}
|
||||
|
||||
virtual void addModuleProvider(ModuleProvider *MP);
|
||||
|
||||
/// removeModuleProvider - Remove a ModuleProvider from the list of modules.
|
||||
/// Relases the Module from the ModuleProvider, materializing it in the
|
||||
/// process, and returns the materialized Module.
|
||||
virtual Module *removeModuleProvider(ModuleProvider *MP,
|
||||
std::string *ErrInfo = 0);
|
||||
|
||||
/// deleteModuleProvider - Remove a ModuleProvider from the list of modules,
|
||||
/// and deletes the ModuleProvider and owned Module. Avoids materializing
|
||||
/// the underlying module.
|
||||
virtual void deleteModuleProvider(ModuleProvider *P,std::string *ErrInfo = 0);
|
||||
|
||||
/// runFunction - Start execution with the specified function and arguments.
|
||||
///
|
||||
virtual GenericValue runFunction(Function *F,
|
||||
|
Loading…
Reference in New Issue
Block a user