[all-commits] [llvm/llvm-project] 43ff63: [Support] Optimize SHA1 implementation
Nick Terrell via All-commits
all-commits at lists.llvm.org
Mon Nov 11 22:16:20 PST 2019
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 43ff63477256d584cf506dba0c222c28231b0ccc
https://github.com/llvm/llvm-project/commit/43ff63477256d584cf506dba0c222c28231b0ccc
Author: Nick Terrell <terrelln at fb.com>
Date: 2019-11-11 (Mon, 11 Nov 2019)
Changed paths:
M llvm/lib/Support/SHA1.cpp
M llvm/unittests/Support/raw_sha1_ostream_test.cpp
Log Message:
-----------
[Support] Optimize SHA1 implementation
* Add inline to the helper functions because gcc-9 won't inline all of
them without the hint. I've avoided `__attribute__((always_inline))`
because gcc and clang will inline without it, and improves
compatibility.
* Replace the byte-by-byte copy in update() with endian::readbe32()
since perf reports that 1/2 of the time is spent copying into the
buffer before this patch.
When lld uses --build-id=sha1 it spends 30-45% of CPU in SHA1 depending on the binary (not wall-time since it is parallel). This patch speeds up SHA1 by a factor of 2 on clang-8 and 3 on gcc-6. This leads to a >10% improvement in overall linking time.
lld-speed-test benchmarks run on an Intel i9-9900k with Turbo disabled on CPU 0 compiled with clang-9. Stats recorded with `perf stat -r 5`. All inputs are using `--build-id=sha1`.
| Input | Before (seconds) | After (seconds) |
| --- | --- | --- |
| chrome | 2.14 | 1.82 (-15%) |
| chrome-icf | 2.56 | 2.29 (-10%) |
| clang | 0.65 | 0.53 (-18%) |
| clang-fsds | 0.69 | 0.58 (-16%) |
| clang-gdb-index | 21.71 | 19.3 (-11%) |
| gold | 0.42 | 0.34 (-19%) |
| gold-fsds | 0.431 | 0.355 (-17%) |
| linux-kernel | 0.625 | 0.575 (-8%) |
| llvm-as | 0.045 | 0.039 (-14%) |
| llvm-as-fsds | 0.035 | 0.039 (-11%) |
| mozilla | 11.3 | 9.8 (-13%) |
| mozilla-gc | 11.84 | 10.36 (-12%) |
| mozilla-O0 | 8.2 | 5.84 (-28%) |
| scylla | 5.59 | 4.52 (-19%) |
Reviewed By: ruiu, MaskRay
Differential Revision: https://reviews.llvm.org/D69295
More information about the All-commits
mailing list