[llvm] [ORC] Add opt-in per-JITDylib colocating slab allocator (PR #207970)
Jared Wyles via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 28 20:09:42 PDT 2026
================
@@ -54,9 +55,58 @@ class MapperJITLinkMemoryManager::InFlightAlloc
};
MapperJITLinkMemoryManager::MapperJITLinkMemoryManager(
- size_t ReservationGranularity, std::unique_ptr<MemoryMapper> Mapper)
- : ReservationUnits(ReservationGranularity), AvailableMemory(AMAllocator),
- Mapper(std::move(Mapper)) {}
+ size_t ReservationGranularity, std::unique_ptr<MemoryMapper> Mapper,
+ bool ColocatePerJITDylib)
+ : ReservationUnits(ReservationGranularity),
+ ColocatePerJITDylib(ColocatePerJITDylib), Mapper(std::move(Mapper)) {}
+
+// Lazily creates and stores Key's pool on first access. Pools are
+// heap-allocated behind unique_ptr so the returned reference survives map
+// rehashing, and AMAllocator (declared before the pools) outlives them.
+MapperJITLinkMemoryManager::AvailableMemoryMap &
+MapperJITLinkMemoryManager::getAvailableMemory(const JITLinkDylib *Key) {
+ auto &Pool = AvailableMemoryPools[Key];
+ if (!Pool)
+ Pool = std::make_unique<AvailableMemoryMap>(AMAllocator);
+ return *Pool;
+}
+
+void MapperJITLinkMemoryManager::allowSingleSlab() {
+ OnSecondSlab = []() -> Error {
+ return make_error<StringError>(
+ "JITDylib slab exhausted (single-slab mode); enable multiple slabs to "
+ "allow growth",
+ inconvertibleErrorCode());
+ };
+}
+
+void MapperJITLinkMemoryManager::allowMultipleSlabs() {
+ OnSecondSlab = []() -> Error { return Error::success(); };
+}
+
+void MapperJITLinkMemoryManager::setOnSecondSlab(
+ unique_function<Error()> Policy) {
+ OnSecondSlab = std::move(Policy);
+}
+
+size_t MapperJITLinkMemoryManager::defaultSlabSize() {
----------------
jaredwy wrote:
This function could be constexpr.
https://github.com/llvm/llvm-project/pull/207970
More information about the llvm-commits
mailing list