diff options
author | Lang Hames <lhames@gmail.com> | 2021-10-11 20:55:30 -0700 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2021-10-11 21:39:00 -0700 |
commit | 962a2479b57f5e0454b472f9c233cda3f89415b1 (patch) | |
tree | 80421530133128550ed5bc1f901a8bede2138efb /llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | |
parent | db9c2d775130a110ada89decff7002c64cdd3364 (diff) | |
download | llvm-962a2479b57f5e0454b472f9c233cda3f89415b1.zip llvm-962a2479b57f5e0454b472f9c233cda3f89415b1.tar.gz llvm-962a2479b57f5e0454b472f9c233cda3f89415b1.tar.bz2 |
Re-apply e50aea58d59, "Major JITLinkMemoryManager refactor". with fixes.
Adds explicit narrowing casts to JITLinkMemoryManager.cpp.
Honors -slab-address option in llvm-jitlink.cpp, which was accidentally
dropped in the refactor.
This effectively reverts commit 6641d29b70993bce6dbd7e0e0f1040753d38842f.
Diffstat (limited to 'llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp index 40d4f19..22a6425 100644 --- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp @@ -306,8 +306,7 @@ public: return Error::success(); } - void notifyFinalized( - std::unique_ptr<JITLinkMemoryManager::Allocation> A) override { + void notifyFinalized(JITLinkMemoryManager::FinalizedAlloc A) override { if (auto Err = Layer.notifyEmitted(*MR, std::move(A))) { Layer.getExecutionSession().reportError(std::move(Err)); MR->failMaterialization(); @@ -680,7 +679,7 @@ void ObjectLinkingLayer::notifyLoaded(MaterializationResponsibility &MR) { } Error ObjectLinkingLayer::notifyEmitted(MaterializationResponsibility &MR, - AllocPtr Alloc) { + FinalizedAlloc FA) { Error Err = Error::success(); for (auto &P : Plugins) Err = joinErrors(std::move(Err), P->notifyEmitted(MR)); @@ -689,17 +688,20 @@ Error ObjectLinkingLayer::notifyEmitted(MaterializationResponsibility &MR, return Err; return MR.withResourceKeyDo( - [&](ResourceKey K) { Allocs[K].push_back(std::move(Alloc)); }); + [&](ResourceKey K) { Allocs[K].push_back(std::move(FA)); }); } Error ObjectLinkingLayer::handleRemoveResources(ResourceKey K) { - Error Err = Error::success(); - - for (auto &P : Plugins) - Err = joinErrors(std::move(Err), P->notifyRemovingResources(K)); + { + Error Err = Error::success(); + for (auto &P : Plugins) + Err = joinErrors(std::move(Err), P->notifyRemovingResources(K)); + if (Err) + return Err; + } - std::vector<AllocPtr> AllocsToRemove; + std::vector<FinalizedAlloc> AllocsToRemove; getExecutionSession().runSessionLocked([&] { auto I = Allocs.find(K); if (I != Allocs.end()) { @@ -708,12 +710,7 @@ Error ObjectLinkingLayer::handleRemoveResources(ResourceKey K) { } }); - while (!AllocsToRemove.empty()) { - Err = joinErrors(std::move(Err), AllocsToRemove.back()->deallocate()); - AllocsToRemove.pop_back(); - } - - return Err; + return MemMgr.deallocate(std::move(AllocsToRemove)); } void ObjectLinkingLayer::handleTransferResources(ResourceKey DstKey, |