Making the type of nodes in the concurrent map a concurrent list will get rid
of the problem of the map itself allocating the node type, which may have a
side effect.
Swift SVN r23443
When we search for metadata we usually search for the same value over and
over again. Instead of searching the value in the binary tree we can save
the value that we found and use it again the next time we search. This
commit adds a cache value. The invariant is that the LastSearch variable
always points to a valid node and the access to the pointer itself is atomic.
This is a major performance win for the current use of getGenericMetadata.
Swift SVN r23434
In debug builds getGenericMetadata takes about 10% of the execution time.
Most of this time is spent in searching the binary tree. This commit splits
the search into cold path and hot path, where the less likely checks are
done after the mode likely checks. This reduces the overall runtime of the
test suite in -Onone by ~1%.
Swift SVN r23419