[clangd] Use TRUE iterator instead of complete posting list
authorKirill Bobyrev <kbobyrev.opensource@gmail.com>
Mon, 27 Aug 2018 09:47:50 +0000 (09:47 +0000)
committerKirill Bobyrev <kbobyrev.opensource@gmail.com>
Mon, 27 Aug 2018 09:47:50 +0000 (09:47 +0000)
commitb217ddb1bb8861411d85899b750ac02cbbcafb88
tree2dcd0ddc8b04e14ce679a15b12bf90be5854c808
parentb5dd092051d7c56eb6502999924b38584321d7a2
[clangd] Use TRUE iterator instead of complete posting list

Stop using `$$$` (empty) trigram and generating a posting list with all
items. Since TRUE iterator is already implemented and correctly inserted
when there are no real trigram posting lists, this is a valid
transformation.

Benchmarks show that this simple change allows ~30% speedup on dataset
of real completion queries.

Before

```
-------------------------------------------------------
Benchmark                Time           CPU Iterations
-------------------------------------------------------
DexAdHocQueries    5640321 ns    5640265 ns        120
DexRealQ         939835603 ns  939830296 ns          1
```

After

```
-------------------------------------------------------
Benchmark                Time           CPU Iterations
-------------------------------------------------------
DexAdHocQueries    3452014 ns    3451987 ns        203
DexRealQ         667455912 ns  667455750 ns          1
```

Reviewed by: ilya-biryukov

Differential Revision: https://reviews.llvm.org/D51287

llvm-svn: 340729
clang-tools-extra/clangd/index/dex/Trigram.cpp