[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>
Wed, 7 Apr 2021 12:04:32 +0000 (14:04 +0200)
commit6951b72334bbe4c189c71751edc1e361d7b5632c
tree4769880a7a705156bf37adeb096644666e4814d1
parentf0e102c1a39f0f7e9e309b27916533b8fefd9be7
[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.

Differential Revision: https://reviews.llvm.org/D99409
clang/lib/Basic/SourceManager.cpp
llvm/test/tools/llvm-objdump/X86/source-interleave-prefix.test