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)
commitafe77f33b2a361ed0d001596dcdde0e16d57abee
treeb25cc464c5327a8b8b188c8c67a4c7ef507431c7
parent47543a8a66fb9451126f134808b55853aca57e1c
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173064 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/ADT/SparseMultiSet.h [new file with mode: 0644]
include/llvm/CodeGen/ScheduleDAGInstrs.h
lib/CodeGen/ScheduleDAGInstrs.cpp
unittests/ADT/CMakeLists.txt
unittests/ADT/SparseMultiSetTest.cpp [new file with mode: 0644]