[GMR] Make the collection of readers and writers of globals much more
authorChandler Carruth <chandlerc@gmail.com>
Wed, 22 Jul 2015 22:10:05 +0000 (22:10 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 22 Jul 2015 22:10:05 +0000 (22:10 +0000)
commit30b2dba6638228d145c73bc8963b4a04d2e1828a
treefc157952e096a34ce14073e401871dfcf9844d75
parent3b12bb79e88dfbfc51e05b5de1f4f7f31b7b65d3
[GMR] Make the collection of readers and writers of globals much more
efficient, NFC.

Previously, we built up vectors of function pointers to track readers
and writers. The primary problem here is that we would add the same
function to this vector every time we found an instruction that reads or
writes to the pointer. This could be a *lot* of redudant function
pointers. Instead of doing that, we can use a SmallPtrSet.

This does more than just reduce the size of the list of readers or
writers. We walk the entire lists of each and do a map lookup for each
one. By having sets, we will only do one map lookup per reader or writer
function.

But only one user of the pointer analyzer actually needs this
information, so we can also skip accumulating it (and doing a lot of
heap allocations) for all the other pointer analysis. This is
particularly useful because there are very many more pointers in some of
the other cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242950 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/IPA/GlobalsModRef.cpp