[LiveDebugValues] Speed up removeEntryValue, NFC
authorVedant Kumar <vsk@apple.com>
Thu, 28 May 2020 01:19:54 +0000 (18:19 -0700)
committerVedant Kumar <vsk@apple.com>
Mon, 1 Jun 2020 18:02:36 +0000 (11:02 -0700)
commit2ecaf93525fe4b271117d3932118ecaccdacaa03
tree5f59185f593a9f2ce4c5d5b73f4c525482940cde
parent836c7dcf1238683ff18882affac1dae5ae5c5f79
[LiveDebugValues] Speed up removeEntryValue, NFC

Summary:
Instead of iterating over all VarLoc IDs in removeEntryValue(), just
iterate over the interval reserved for entry value VarLocs. This changes
the iteration order, hence the test update -- otherwise this is NFC.

This appears to give an ~8.5x wall time speed-up for LiveDebugValues when
compiling sqlite3.c 3.30.1 with a Release clang (on my machine):

```
          ---User Time---   --System Time--   --User+System--   ---Wall Time--- --- Name ---
  Before: 2.5402 ( 18.8%)   0.0050 (  0.4%)   2.5452 ( 17.3%)   2.5452 ( 17.3%) Live DEBUG_VALUE analysis
   After: 0.2364 (  2.1%)   0.0034 (  0.3%)   0.2399 (  2.0%)   0.2398 (  2.0%) Live DEBUG_VALUE analysis
```

The change in removeEntryValue() is the only one that appears to affect
wall time, but for consistency (and to resolve a pending TODO), I made
the analogous changes for iterating over SpillLocKind VarLocs.

Reviewers: nikic, aprantl, jmorse, djtodoro

Subscribers: hiraditya, dexonsmith, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D80684
llvm/include/llvm/ADT/CoalescingBitVector.h
llvm/lib/CodeGen/LiveDebugValues.cpp
llvm/test/DebugInfo/MIR/X86/entry-values-diamond-bbs.mir
llvm/unittests/ADT/CoalescingBitVectorTest.cpp