Please sign in to comment.
[scudo][standalone] Optimization pass
Summary: This introduces a bunch of small optimizations with the purpose of making the fastpath tighter: - tag more conditions as `LIKELY`/`UNLIKELY`: as a rule of thumb we consider that every operation related to the secondary is unlikely - attempt to reduce the number of potentially extraneous instructions - reorganize the `Chunk` header to not straddle a word boundary and use more appropriate types Note that some `LIKELY`/`UNLIKELY` impact might be less obvious as they are in slow paths (for example in `secondary.cc`), but at this point I am throwing a pretty wide net, and it's consistant and doesn't hurt. This was mosly done for the benfit of Android, but other platforms benefit from it too. An aarch64 Android benchmark gives: - before: ``` BM_youtube/min_time:15.000/repeats:4/manual_time_mean 445244 us 659385 us 4 BM_youtube/min_time:15.000/repeats:4/manual_time_median 445007 us 658970 us 4 BM_youtube/min_time:15.000/repeats:4/manual_time_stddev 885 us 1332 us 4 ``` - after: ``` BM_youtube/min_time:15.000/repeats:4/manual_time_mean 415697 us 621925 us 4 BM_youtube/min_time:15.000/repeats:4/manual_time_median 415913 us 622061 us 4 BM_youtube/min_time:15.000/repeats:4/manual_time_stddev 990 us 1163 us 4 ``` Additional since `-Werror=conversion` is enabled on some platforms we are built on, enable it upstream to catch things early: a few sign conversions had slept through and needed additional casting. Reviewers: hctim, morehouse, eugenis, vitalybuka Reviewed By: vitalybuka Subscribers: srhines, mgorny, javed.absar, kristof.beyls, delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D64664 llvm-svn: 366918
- Loading branch information...
Showing with 91 additions and 94 deletions.
- +1 −0 compiler-rt/lib/scudo/standalone/CMakeLists.txt
- +10 −10 compiler-rt/lib/scudo/standalone/chunk.h
- +33 −33 compiler-rt/lib/scudo/standalone/combined.h
- +5 −5 compiler-rt/lib/scudo/standalone/fuchsia.cc
- +6 −8 compiler-rt/lib/scudo/standalone/local_cache.h
- +7 −7 compiler-rt/lib/scudo/standalone/mutex.h
- +6 −5 compiler-rt/lib/scudo/standalone/primary32.h
- +9 −8 compiler-rt/lib/scudo/standalone/primary64.h
- +5 −7 compiler-rt/lib/scudo/standalone/secondary.cc
- +1 −1 compiler-rt/lib/scudo/standalone/secondary.h
- +2 −2 compiler-rt/lib/scudo/standalone/size_class_map.h
- +2 −3 compiler-rt/lib/scudo/standalone/string_utils.cc
- +2 −2 compiler-rt/lib/scudo/standalone/tsd_exclusive.h
- +2 −3 compiler-rt/lib/scudo/standalone/tsd_shared.h
Oops, something went wrong.