[compiler-rt] r208776 - [asan] use some LIKELY/UNLIKELY
Kostya Serebryany
kcc at google.com
Wed May 14 10:29:10 PDT 2014
benchmarking this is hard because the majority of asan's slowdown comes
from other places,
this is more like general performance hygiene.
(And no, I did not run SPEC benchmarks for this CL)
On Wed, May 14, 2014 at 9:21 PM, Sergey Matveev <earthdok at google.com> wrote:
> are there benchmarks?
>
>
> On Wed, May 14, 2014 at 6:03 PM, Kostya Serebryany <kcc at google.com> wrote:
>
>> Author: kcc
>> Date: Wed May 14 09:03:31 2014
>> New Revision: 208776
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=208776&view=rev
>> Log:
>> [asan] use some LIKELY/UNLIKELY
>>
>> Modified:
>> compiler-rt/trunk/lib/asan/asan_allocator2.cc
>> compiler-rt/trunk/lib/asan/asan_interceptors.cc
>> compiler-rt/trunk/lib/asan/asan_interceptors.h
>> compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
>> compiler-rt/trunk/lib/asan/asan_malloc_mac.cc
>> compiler-rt/trunk/lib/asan/asan_rtl.cc
>> compiler-rt/trunk/lib/asan/asan_stack.h
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_allocator2.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_allocator2.cc?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_allocator2.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_allocator2.cc Wed May 14 09:03:31 2014
>> @@ -281,7 +281,7 @@ void ReInitializeAllocator() {
>>
>> static void *Allocate(uptr size, uptr alignment, StackTrace *stack,
>> AllocType alloc_type, bool can_fill) {
>> - if (!asan_inited)
>> + if (UNLIKELY(!asan_inited))
>> AsanInitFromRtl();
>> Flags &fl = *flags();
>> CHECK(stack);
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Wed May 14 09:03:31
>> 2014
>> @@ -117,13 +117,15 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free,
>> #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, size) \
>> ASAN_WRITE_RANGE(ptr, size)
>> #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, size)
>> ASAN_READ_RANGE(ptr, size)
>> -#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...) \
>> - do { \
>> - if (asan_init_is_running) return REAL(func)(__VA_ARGS__); \
>> - ctx = 0; \
>> - (void) ctx; \
>> - if (SANITIZER_MAC && !asan_inited) return REAL(func)(__VA_ARGS__); \
>> - ENSURE_ASAN_INITED(); \
>> +#define COMMON_INTERCEPTOR_ENTER(ctx, func, ...)
>> \
>> + do {
>> \
>> + if (asan_init_is_running)
>> \
>> + return REAL(func)(__VA_ARGS__);
>> \
>> + ctx = 0;
>> \
>> + (void) ctx;
>> \
>> + if (SANITIZER_MAC && UNLIKELY(!asan_inited))
>> \
>> + return REAL(func)(__VA_ARGS__);
>> \
>> + ENSURE_ASAN_INITED();
>> \
>> } while (false)
>> #define COMMON_INTERCEPTOR_FD_ACQUIRE(ctx, fd) \
>> do { \
>> @@ -328,7 +330,7 @@ static inline int CharCmp(unsigned char
>> }
>>
>> INTERCEPTOR(int, memcmp, const void *a1, const void *a2, uptr size) {
>> - if (!asan_inited) return internal_memcmp(a1, a2, size);
>> + if (UNLIKELY(!asan_inited)) return internal_memcmp(a1, a2, size);
>> ENSURE_ASAN_INITED();
>> if (flags()->replace_intrin) {
>> if (flags()->strict_memcmp) {
>> @@ -356,7 +358,7 @@ INTERCEPTOR(int, memcmp, const void *a1,
>> }
>>
>> void *__asan_memcpy(void *to, const void *from, uptr size) {
>> - if (!asan_inited) return internal_memcpy(to, from, size);
>> + if (UNLIKELY(!asan_inited)) return internal_memcpy(to, from, size);
>> // memcpy is called during __asan_init() from the internals
>> // of printf(...).
>> if (asan_init_is_running) {
>> @@ -376,7 +378,7 @@ void *__asan_memcpy(void *to, const void
>> }
>>
>> void *__asan_memset(void *block, int c, uptr size) {
>> - if (!asan_inited) return internal_memset(block, c, size);
>> + if (UNLIKELY(!asan_inited)) return internal_memset(block, c, size);
>> // memset is called inside Printf.
>> if (asan_init_is_running) {
>> return REAL(memset)(block, c, size);
>> @@ -389,7 +391,7 @@ void *__asan_memset(void *block, int c,
>> }
>>
>> void *__asan_memmove(void *to, const void *from, uptr size) {
>> - if (!asan_inited)
>> + if (UNLIKELY(!asan_inited))
>> return internal_memmove(to, from, size);
>> ENSURE_ASAN_INITED();
>> if (flags()->replace_intrin) {
>> @@ -422,7 +424,7 @@ INTERCEPTOR(void*, memset, void *block,
>> }
>>
>> INTERCEPTOR(char*, strchr, const char *str, int c) {
>> - if (!asan_inited) return internal_strchr(str, c);
>> + if (UNLIKELY(!asan_inited)) return internal_strchr(str, c);
>> // strchr is called inside create_purgeable_zone() when
>> MallocGuardEdges=1 is
>> // used.
>> if (asan_init_is_running) {
>> @@ -491,7 +493,7 @@ INTERCEPTOR(char*, strncat, char *to, co
>>
>> INTERCEPTOR(char*, strcpy, char *to, const char *from) { // NOLINT
>> #if SANITIZER_MAC
>> - if (!asan_inited) return REAL(strcpy)(to, from); // NOLINT
>> + if (UNLIKELY(!asan_inited)) return REAL(strcpy)(to, from); // NOLINT
>> #endif
>> // strcpy is called from malloc_default_purgeable_zone()
>> // in __asan::ReplaceSystemAlloc() on Mac.
>> @@ -510,7 +512,7 @@ INTERCEPTOR(char*, strcpy, char *to, con
>>
>> #if ASAN_INTERCEPT_STRDUP
>> INTERCEPTOR(char*, strdup, const char *s) {
>> - if (!asan_inited) return internal_strdup(s);
>> + if (UNLIKELY(!asan_inited)) return internal_strdup(s);
>> ENSURE_ASAN_INITED();
>> uptr length = REAL(strlen)(s);
>> if (flags()->replace_str) {
>> @@ -524,7 +526,7 @@ INTERCEPTOR(char*, strdup, const char *s
>> #endif
>>
>> INTERCEPTOR(uptr, strlen, const char *s) {
>> - if (!asan_inited) return internal_strlen(s);
>> + if (UNLIKELY(!asan_inited)) return internal_strlen(s);
>> // strlen is called from malloc_default_purgeable_zone()
>> // in __asan::ReplaceSystemAlloc() on Mac.
>> if (asan_init_is_running) {
>> @@ -606,7 +608,7 @@ INTERCEPTOR(long, strtol, const char *np
>>
>> INTERCEPTOR(int, atoi, const char *nptr) {
>> #if SANITIZER_MAC
>> - if (!asan_inited) return REAL(atoi)(nptr);
>> + if (UNLIKELY(!asan_inited)) return REAL(atoi)(nptr);
>> #endif
>> ENSURE_ASAN_INITED();
>> if (!flags()->replace_str) {
>> @@ -625,7 +627,7 @@ INTERCEPTOR(int, atoi, const char *nptr)
>>
>> INTERCEPTOR(long, atol, const char *nptr) { // NOLINT
>> #if SANITIZER_MAC
>> - if (!asan_inited) return REAL(atol)(nptr);
>> + if (UNLIKELY(!asan_inited)) return REAL(atol)(nptr);
>> #endif
>> ENSURE_ASAN_INITED();
>> if (!flags()->replace_str) {
>> @@ -682,7 +684,7 @@ static void AtCxaAtexit(void *unused) {
>> INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg,
>> void *dso_handle) {
>> #if SANITIZER_MAC
>> - if (!asan_inited) return REAL(__cxa_atexit)(func, arg, dso_handle);
>> + if (UNLIKELY(!asan_inited)) return REAL(__cxa_atexit)(func, arg,
>> dso_handle);
>> #endif
>> ENSURE_ASAN_INITED();
>> int res = REAL(__cxa_atexit)(func, arg, dso_handle);
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_interceptors.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.h?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_interceptors.h (original)
>> +++ compiler-rt/trunk/lib/asan/asan_interceptors.h Wed May 14 09:03:31
>> 2014
>> @@ -96,7 +96,7 @@ void InitializeAsanInterceptors();
>>
>> #define ENSURE_ASAN_INITED() do { \
>> CHECK(!asan_init_is_running); \
>> - if (!asan_inited) { \
>> + if (UNLIKELY(!asan_inited)) { \
>> AsanInitFromRtl(); \
>> } \
>> } while (0)
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_linux.cc?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_malloc_linux.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_malloc_linux.cc Wed May 14 09:03:31
>> 2014
>> @@ -77,7 +77,7 @@ INTERCEPTOR(void*, malloc, uptr size) {
>> }
>>
>> INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) {
>> - if (!asan_inited) {
>> + if (UNLIKELY(!asan_inited)) {
>> // Hack: dlsym calls calloc before REAL(calloc) is retrieved from
>> dlsym.
>> const uptr kCallocPoolSize = 1024;
>> static uptr calloc_memory_for_dlsym[kCallocPoolSize];
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_malloc_mac.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_mac.cc?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_malloc_mac.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_malloc_mac.cc Wed May 14 09:03:31 2014
>> @@ -159,7 +159,7 @@ size_t mz_size(malloc_zone_t* zone, cons
>> }
>>
>> void *mz_malloc(malloc_zone_t *zone, size_t size) {
>> - if (!asan_inited) {
>> + if (UNLIKELY(!asan_inited)) {
>> CHECK(system_malloc_zone);
>> return malloc_zone_malloc(system_malloc_zone, size);
>> }
>> @@ -168,7 +168,7 @@ void *mz_malloc(malloc_zone_t *zone, siz
>> }
>>
>> void *mz_calloc(malloc_zone_t *zone, size_t nmemb, size_t size) {
>> - if (!asan_inited) {
>> + if (UNLIKELY(!asan_inited)) {
>> // Hack: dlsym calls calloc before REAL(calloc) is retrieved from
>> dlsym.
>> const size_t kCallocPoolSize = 1024;
>> static uptr calloc_memory_for_dlsym[kCallocPoolSize];
>> @@ -184,7 +184,7 @@ void *mz_calloc(malloc_zone_t *zone, siz
>> }
>>
>> void *mz_valloc(malloc_zone_t *zone, size_t size) {
>> - if (!asan_inited) {
>> + if (UNLIKELY(!asan_inited)) {
>> CHECK(system_malloc_zone);
>> return malloc_zone_valloc(system_malloc_zone, size);
>> }
>> @@ -242,7 +242,7 @@ void mz_destroy(malloc_zone_t* zone) {
>> #if defined(MAC_OS_X_VERSION_10_6) && \
>> MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
>> void *mz_memalign(malloc_zone_t *zone, size_t align, size_t size) {
>> - if (!asan_inited) {
>> + if (UNLIKELY(!asan_inited)) {
>> CHECK(system_malloc_zone);
>> return malloc_zone_memalign(system_malloc_zone, align, size);
>> }
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_rtl.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_rtl.cc?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_rtl.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_rtl.cc Wed May 14 09:03:31 2014
>> @@ -552,7 +552,7 @@ static void PrintAddressSpaceLayout() {
>> }
>>
>> static void AsanInitInternal() {
>> - if (asan_inited) return;
>> + if (LIKELY(asan_inited)) return;
>> SanitizerToolName = "AddressSanitizer";
>> CHECK(!asan_init_is_running && "ASan init calls itself!");
>> asan_init_is_running = true;
>> @@ -708,7 +708,7 @@ public: // NOLINT
>> AsanInitializer() {
>> AsanCheckIncompatibleRT();
>> AsanCheckDynamicRTPrereqs();
>> - if (!asan_inited)
>> + if (UNLIKELY(!asan_inited))
>> __asan_init();
>> }
>> };
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_stack.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_stack.h?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_stack.h (original)
>> +++ compiler-rt/trunk/lib/asan/asan_stack.h Wed May 14 09:03:31 2014
>> @@ -32,7 +32,7 @@ void GetStackTraceWithPcBpAndContext(Sta
>> #else
>> AsanThread *t;
>> stack->size = 0;
>> - if (asan_inited) {
>> + if (LIKELY(asan_inited)) {
>> if ((t = GetCurrentThread()) && !t->isUnwinding()) {
>> uptr stack_top = t->stack_top();
>> uptr stack_bottom = t->stack_bottom();
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=208776&r1=208775&r2=208776&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h Wed
>> May 14 09:03:31 2014
>> @@ -199,7 +199,7 @@ void NORETURN CheckFailed(const char *fi
>>
>> // Check macro
>> #define RAW_CHECK_MSG(expr, msg) do { \
>> - if (!(expr)) { \
>> + if (UNLIKELY(!(expr))) { \
>> RawWrite(msg); \
>> Die(); \
>> } \
>> @@ -211,7 +211,7 @@ void NORETURN CheckFailed(const char *fi
>> do { \
>> __sanitizer::u64 v1 = (u64)(c1); \
>> __sanitizer::u64 v2 = (u64)(c2); \
>> - if (!(v1 op v2)) \
>> + if (UNLIKELY(!(v1 op v2))) \
>> __sanitizer::CheckFailed(__FILE__, __LINE__, \
>> "(" #c1 ") " #op " (" #c2 ")", v1, v2); \
>> } while (false) \
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140514/26fcae9e/attachment.html>
More information about the llvm-commits
mailing list