| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
implementations.
This assumes that
a) finding the bucket containing the value is LIKELY
b) finding an empty bucket is LIKELY
c) growing the table is UNLIKELY
I also switched the a) and b) cases for SmallPtrSet as we seem to use
the set mostly more for insertion than for checking existence.
In a simple benchmark consisting of 2^21 insertions of 2^20 unique
pointers into a DenseMap or SmallPtrSet a few percent speedup on average,
but nothing statistically significant.
llvm-svn: 230232
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pair<iterator, bool>
This is to be consistent with StringSet and ultimately with the standard
library's associative container insert function.
This lead to updating SmallSet::insert to return pair<iterator, bool>,
and then to update SmallPtrSet::insert to return pair<iterator, bool>,
and then to update all the existing users of those functions...
llvm-svn: 222334
|
|
|
|
|
|
| |
capacity. Then fix the early return in the move constructor that prevented 'small' moves from clearing the NumElements in the moved from object. The directed test missed this because it was always testing large moves due to the off by 1 bug.
llvm-svn: 216044
|
|
|
|
| |
llvm-svn: 205697
|
|
|
|
|
|
| |
libraries. It is now always 1 in LLVM builds.
llvm-svn: 202580
|
|
|
|
|
|
|
|
|
|
|
| |
'SmallPtrSetImplBase'. This more closely matches the organization of
SmallVector and should allow introducing a SmallPtrSetImpl which serves
the same purpose as SmallVectorImpl: isolating the element type from the
particular small size chosen. This in turn allows a lot of
simplification of APIs by not coding them against a specific small size
which is rarely needed.
llvm-svn: 200687
|
|
|
|
|
|
|
|
|
|
|
|
| |
protection to the same layer.
This is in line with Howard's advice on how best to handle self-move
assignment as he explained on SO[1]. It also ensures that implementing
swap with move assignment continues to work in the case of self-swap.
[1]: http://stackoverflow.com/questions/9322174/move-assignment-operator-and-if-this-rhs
llvm-svn: 195705
|
|
|
|
|
|
|
| |
implementation. Silliness, but it'll be a trivial performance
optimization. This should clear up a failure on the vg_leak bot.
llvm-svn: 195704
|
|
|
|
|
|
|
|
|
|
|
| |
Enhance the tests to actually require moves in C++11 mode, in addition
to testing the moved-from state. Further enhance the tests to cover
copy-assignment into a moved-from object and moving a large-state
object. (Note that we can't really test small-state vs. large-state as
that isn't an observable property of the API really.) This should finish
addressing review on r195239.
llvm-svn: 195261
|
|
|
|
|
|
|
|
|
|
|
|
| |
Somehow, this ADT got missed which is moderately terrifying considering
the efficiency of move for it.
The code to implement move semantics for it is pretty horrible
currently but was written to reasonably closely match the rest of the
code. Unittests that cover both copying and moving (at a basic level)
added.
llvm-svn: 195239
|
|
|
|
| |
llvm-svn: 195018
|
|
|
|
|
|
| |
This time tested on both OSX and Linux.
llvm-svn: 178377
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
prone to"
This reverts commit 617330909f0c26a3f2ab8601a029b9bdca48aa61.
It broke the bots:
/home/clangbuild2/clang-ppc64-2/llvm.src/unittests/ADT/SmallVectorTest.cpp:150: PushPopTest
/home/clangbuild2/clang-ppc64-2/llvm.src/unittests/ADT/SmallVectorTest.cpp:118: Failure
Value of: v[i].getValue()
Actual: 0
Expected: value
Which is: 2
llvm-svn: 178334
|
|
|
|
|
|
| |
being power-of-two sized.
llvm-svn: 178332
|
|
|
|
|
|
|
|
|
|
| |
a bad one ourselves.
DenseMap's hash function uses slightly more entropy and reduces hash collisions
significantly. I also experimented with Hashing.h, but it didn't gave a lot of
improvement while being much more expensive to compute.
llvm-svn: 154996
|
|
|
|
| |
llvm-svn: 152254
|
|
|
|
|
|
|
| |
This fixes a build failure in webkit. Copying all elements shouldn't be
necessary, I'll look out for a better fix soon.
llvm-svn: 152252
|
|
|
|
|
|
|
|
|
| |
default triple-copy std::swap.
This currently assumes that both sets have the same SmallSize to keep the implementation simple,
a limitation that can be lifted if someone cares.
llvm-svn: 152143
|
|
|
|
|
|
|
|
| |
Rehash but don't grow when full of tombstones.
Patch by José Fonseca!
llvm-svn: 128566
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
replaced by a bigger array in SmallPtrSet (by overridding it), instead just use a
pointer to the start of the storage, and have SmallPtrSet pass in the value to use.
This has the disadvantage that SmallPtrSet becomes bigger by one pointer. It has
the advantage that it no longer uses tricky C++ rules, and is clearly correct while
I'm not sure the previous version was. This was inspired by g++-4.6 pointing out
that SmallPtrSetImpl was writing off the end of SmallArray, which it was. Since
SmallArray is replaced with a bigger array in SmallPtrSet, the write was still to
valid memory. But it was writing off the end of the declared array type - sounds
kind of dubious to me, like it sounded dubious to g++-4.6. Maybe g++-4.6 is wrong
and this construct is perfectly valid and correctly compiled by all compilers, but
I think it is better to avoid the whole can of worms by avoiding this construct.
llvm-svn: 107285
|
|
|
|
| |
llvm-svn: 54349
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
|
|
| |
minor bugs.
llvm-svn: 43782
|
|
|
|
| |
llvm-svn: 41111
|
|
|
|
|
|
|
|
|
|
| |
contents of the set were small, deallocate and shrink the set. This
avoids having us to memset as much data, significantly speeding up
some pathological cases. For example, this speeds up the verifier
from 0.3899s to 0.0763 (5.1x) on the testcase from PR1432 in a
release build.
llvm-svn: 40837
|
|
|
|
| |
llvm-svn: 40556
|
|
|
|
| |
llvm-svn: 40474
|
|
|
|
| |
llvm-svn: 40043
|
|
|
|
|
|
|
| |
would result in calling realloc() on a null pointer. Instead, if we encounter
this situation, make a normal call to malloc().
llvm-svn: 40014
|
|
|
|
|
|
| |
having that implementation file #include <cstdlib>.
llvm-svn: 39952
|
|
|
|
| |
llvm-svn: 39926
|
|
|
|
| |
llvm-svn: 38474
|
|
|
|
|
|
|
|
|
|
| |
long-standing bug in the copy
ctor while I'm at it.
Thanks to Chris Lattner for help with this patch.
llvm-svn: 38470
|
|
|
|
|
|
|
|
| |
GVNPRE.cpp.
Patch by Chis Lattner.
llvm-svn: 38467
|
|
|
|
| |
llvm-svn: 38460
|
|
|
|
| |
llvm-svn: 37697
|
|
|
|
|
|
|
|
|
| |
1. Make SmallPtrSet::erase faster in the small case by replacing a memmove
with a pointer copy.
2. Fix a bug where the null terminator at the end of the array in the small
case was not copied
llvm-svn: 37696
|
|
|
|
| |
llvm-svn: 36016
|
|
|
|
| |
llvm-svn: 33973
|
|
|
|
|
|
| |
element was in the set.
llvm-svn: 33931
|
|
|
|
| |
llvm-svn: 33581
|
|
|
|
| |
llvm-svn: 33578
|
|
llvm-svn: 33577
|