Introduce a new data structure, the SparseMultiSet, and changes to the MI scheduler...
authorMichael Ilseman <milseman@apple.com>
Mon, 21 Jan 2013 18:18:53 +0000 (18:18 +0000)
committerMichael Ilseman <milseman@apple.com>
Mon, 21 Jan 2013 18:18:53 +0000 (18:18 +0000)
commit3e3194f4ece2261b9b90d967793a1dd19281693e
treefbb4f23fd1b249382e3a8b66410bc72b8ebdbaba
parent9221b8fdac14c628c5f084bbf7bca352ee6bf3a2
Introduce a new data structure, the SparseMultiSet, and changes to the MI scheduler to use it.

A SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's desirable properties. Essentially, SparseMultiSet provides multiset behavior by storing its dense data in doubly linked lists that are inlined into the dense vector. This allows it to provide good data locality as well as vector-like constant-time clear() and fast constant time find(), insert(), and erase(). It also allows SparseMultiSet to have a builtin recycler rather than keeping SparseSet's behavior of always swapping upon removal, which allows it to preserve more iterators. It's often a better alternative to a SparseSet of a growable container or vector-of-vector.

llvm-svn: 173064
llvm/include/llvm/ADT/SparseMultiSet.h [new file with mode: 0644]
llvm/include/llvm/CodeGen/ScheduleDAGInstrs.h
llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
llvm/unittests/ADT/CMakeLists.txt
llvm/unittests/ADT/SparseMultiSetTest.cpp [new file with mode: 0644]