[clang] Speedup line offset mapping computation
authorserge-sans-paille <sguelton@redhat.com>
Thu, 1 Apr 2021 20:18:55 +0000 (22:18 +0200)
committerserge-sans-paille <sguelton@redhat.com>
Thu, 8 Apr 2021 08:11:56 +0000 (10:11 +0200)
commit20105b6b4874a85813f7a4a3d8ad2a0f023dda14
tree51ac8eb0e312c262021515a8c6f69df6afd3f451
parentedb18ea5a9132a8e359ce0c0b103286d15244b8a
[clang] Speedup line offset mapping computation

Clang spends a decent amount of time in the LineOffsetMapping::get(...)
function. This function used to be vectorized (through SSE2) then the
optimization got dropped because the sequential version was on-par performance
wise.

This provides an optimization of the sequential version that works on a word at
a time, using (documented) bithacks to provide a portable vectorization.

When preprocessing the sqlite amalgamation, this yields a sweet 3% speedup.

This is a recommit of 6951b72334bbe4c189c71751edc1e361d7b5632c with endianness
and unsigned long vs uint64_t issues fixed (hopefully).

Differential Revision: https://reviews.llvm.org/D99409
clang/lib/Basic/SourceManager.cpp