[llvm-dev] Improve the performance of JamCRC

Scott Smith via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 12 21:52:06 PDT 2017

Sorry, that last patch didn't handle endianness very well.  Here's an
updated patch that uses llvm::support::endian.  I assume unaligned input,
which is safer.  I have no idea whether one can expect aligned input to
this function.  It also wouldn't take much to process the first <=3 bytes
one at a time, then blast through assuming aligned reads, and then finish
up with another <=3 bytes.  Let me know if you prefer that.

On Wed, Apr 12, 2017 at 8:49 PM, Scott Smith <scott.smith at purestorage.com>

> Lldb relies heavily on crc when loading shared libraries.  The existing
> implementation is quite slow as it computes a byte at a time, creating a
> long dependency chain.
> Unfortunately the polynomial is not the same as the one implemented by x86
> processors in SSE 4.2, but there's another way to make it faster by using
> more lookup tables.
> Zlib implements this, but rather than require zlib, I instead added the
> relevant code to compute four bytes at a time in parallel.
> A separate patch changes lldb to rely on JamCRC instead of its own
> implementation.  This patch improves the performance, which brings my test
> (starting lldb, breaking at main) from 47 seconds down to 36 seconds.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170412/32c54905/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jamcrc.patch
Type: application/octet-stream
Size: 16784 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170412/32c54905/attachment-0001.obj>

More information about the llvm-dev mailing list