diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/MCJIT')
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 31 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.h | 3 |
2 files changed, 14 insertions, 20 deletions
diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 2724f8c61ef..f6c3c18a4fd 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -82,15 +82,9 @@ MCJIT::~MCJIT() { Dyld.deregisterEHFrames(); - LoadedObjectList::iterator it, end; - for (it = LoadedObjects.begin(), end = LoadedObjects.end(); it != end; ++it) { - ObjectImage *Obj = *it; - if (Obj) { + for (auto &Obj : LoadedObjects) + if (Obj) NotifyFreeingObject(*Obj); - delete Obj; - } - } - LoadedObjects.clear(); Archives.clear(); } @@ -106,11 +100,11 @@ bool MCJIT::removeModule(Module *M) { } void MCJIT::addObjectFile(std::unique_ptr<object::ObjectFile> Obj) { - ObjectImage *LoadedObject = Dyld.loadObject(std::move(Obj)); + std::unique_ptr<ObjectImage> LoadedObject = Dyld.loadObject(std::move(Obj)); if (!LoadedObject || Dyld.hasError()) report_fatal_error(Dyld.getErrorString()); - LoadedObjects.push_back(LoadedObject); + LoadedObjects.push_back(std::move(LoadedObject)); NotifyObjectEmitted(*LoadedObject); } @@ -183,9 +177,10 @@ void MCJIT::generateCodeForModule(Module *M) { std::unique_ptr<ObjectBuffer> ObjectToLoad; // Try to load the pre-compiled object from cache if possible if (ObjCache) { - std::unique_ptr<MemoryBuffer> PreCompiledObject(ObjCache->getObject(M)); - if (PreCompiledObject.get()) - ObjectToLoad.reset(new ObjectBuffer(PreCompiledObject.release())); + if (std::unique_ptr<MemoryBuffer> PreCompiledObject = + ObjCache->getObject(M)) + ObjectToLoad = + llvm::make_unique<ObjectBuffer>(std::move(PreCompiledObject)); } // If the cache did not contain a suitable object, compile the object @@ -196,8 +191,8 @@ void MCJIT::generateCodeForModule(Module *M) { // Load the object into the dynamic linker. // MCJIT now owns the ObjectImage pointer (via its LoadedObjects list). - ObjectImage *LoadedObject = Dyld.loadObject(ObjectToLoad.release()); - LoadedObjects.push_back(LoadedObject); + std::unique_ptr<ObjectImage> LoadedObject = + Dyld.loadObject(std::move(ObjectToLoad)); if (!LoadedObject) report_fatal_error(Dyld.getErrorString()); @@ -206,6 +201,8 @@ void MCJIT::generateCodeForModule(Module *M) { NotifyObjectEmitted(*LoadedObject); + LoadedObjects.push_back(std::move(LoadedObject)); + OwnedModules.markModuleAsLoaded(M); } @@ -563,10 +560,8 @@ void MCJIT::NotifyObjectEmitted(const ObjectImage& Obj) { } void MCJIT::NotifyFreeingObject(const ObjectImage& Obj) { MutexGuard locked(lock); - for (unsigned I = 0, S = EventListeners.size(); I < S; ++I) { - JITEventListener *L = EventListeners[I]; + for (JITEventListener *L : EventListeners) L->NotifyFreeingObject(Obj); - } } uint64_t LinkingMemoryManager::getSymbolAddress(const std::string &Name) { diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h index 1c0d22e0ece..d52a7322eb3 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.h @@ -219,8 +219,7 @@ class MCJIT : public ExecutionEngine { SmallVector<object::OwningBinary<object::Archive>, 2> Archives; SmallVector<std::unique_ptr<MemoryBuffer>, 2> Buffers; - typedef SmallVector<ObjectImage *, 2> LoadedObjectList; - LoadedObjectList LoadedObjects; + SmallVector<std::unique_ptr<ObjectImage>, 2> LoadedObjects; // An optional ObjectCache to be notified of compiled objects and used to // perform lookup of pre-compiled code to avoid re-compilation. |