summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Kortchinsky <kostyak@google.com>2018-05-16 18:12:31 +0000
committerKostya Kortchinsky <kostyak@google.com>2018-05-16 18:12:31 +0000
commite5c9e9f0bdea12a512dc3977950a7c97dbf979a4 (patch)
treee826cf7d1a0c99f8ce376ae4a449874e4998fee9
parent332bbb0fea827139879ae09f78406ace3d25a94a (diff)
downloadbcm5719-llvm-e5c9e9f0bdea12a512dc3977950a7c97dbf979a4.tar.gz
bcm5719-llvm-e5c9e9f0bdea12a512dc3977950a7c97dbf979a4.zip
[scudo] Quarantine optimization
Summary: It turns out that the previous code construct was not optimizing the allocation and deallocation of batches. The class id was read as a class member (even though a precomputed one) and nothing else was optimized. By changing the construct this way, the compiler actually optimizes most of the allocation and deallocation away to only work with a single class id, which not only saves some CPU but also some code footprint. Reviewers: alekseyshl, dvyukov Reviewed By: dvyukov Subscribers: dvyukov, delcypher, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D46961 llvm-svn: 332502
-rw-r--r--compiler-rt/lib/scudo/scudo_allocator.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler-rt/lib/scudo/scudo_allocator.cpp b/compiler-rt/lib/scudo/scudo_allocator.cpp
index c72ac8601ba..5a9315e086f 100644
--- a/compiler-rt/lib/scudo/scudo_allocator.cpp
+++ b/compiler-rt/lib/scudo/scudo_allocator.cpp
@@ -197,16 +197,17 @@ struct QuarantineCallback {
// that the batches are indeed serviced by the Primary.
// TODO(kostyak): figure out the best way to protect the batches.
void *Allocate(uptr Size) {
+ const uptr BatchClassId = SizeClassMap::ClassID(sizeof(QuarantineBatch));
return getBackendAllocator().allocatePrimary(Cache_, BatchClassId);
}
void Deallocate(void *Ptr) {
+ const uptr BatchClassId = SizeClassMap::ClassID(sizeof(QuarantineBatch));
getBackendAllocator().deallocatePrimary(Cache_, Ptr, BatchClassId);
}
AllocatorCache *Cache_;
COMPILER_CHECK(sizeof(QuarantineBatch) < SizeClassMap::kMaxSize);
- const uptr BatchClassId = SizeClassMap::ClassID(sizeof(QuarantineBatch));
};
typedef Quarantine<QuarantineCallback, void> ScudoQuarantine;
OpenPOWER on IntegriCloud