diff options
author | Kostya Kortchinsky <kostyak@google.com> | 2018-05-16 18:12:31 +0000 |
---|---|---|
committer | Kostya Kortchinsky <kostyak@google.com> | 2018-05-16 18:12:31 +0000 |
commit | e5c9e9f0bdea12a512dc3977950a7c97dbf979a4 (patch) | |
tree | e826cf7d1a0c99f8ce376ae4a449874e4998fee9 | |
parent | 332bbb0fea827139879ae09f78406ace3d25a94a (diff) | |
download | bcm5719-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.cpp | 3 |
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; |