- Mar 06, 2012
-
-
Benjamin Kramer authored
SmallPtrSet: Provide a more efficient implementation of swap than the 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
-
- Mar 04, 2012
-
-
Chandler Carruth authored
llvm-svn: 152003
-
Chandler Carruth authored
llvm-svn: 152000
-
Chandler Carruth authored
llvm-svn: 151999
-
- Mar 03, 2012
-
-
Francois Pichet authored
Move the NonPOD struct out of the anonymous namespace instead of adding llvm:: everywhere to fix the HashingTest on MSVC . chandlerc proposed this better solution on IRC. llvm-svn: 151974
-
Francois Pichet authored
llvm-svn: 151971
-
NAKAMURA Takumi authored
unittests/ADT/HashingTest.cpp: Temporarily disable a new test introduced in r151891, to appease msvc. llvm-svn: 151970
-
- Mar 02, 2012
-
-
Chandler Carruth authored
just ensure that the number of bytes in the pair is the sum of the bytes in each side of the pair. As long as thats true, there are no extra bytes that might be padding. Also add a few tests that previously would have slipped through the checking. The more accurate checking mechanism catches these and ensures they are handled conservatively correctly. Thanks to Duncan for prodding me to do this right and more simply. llvm-svn: 151891
-
Chandler Carruth authored
llvm-svn: 151886
-
Chandler Carruth authored
for 32-bit builds in here. llvm-svn: 151885
-
Chandler Carruth authored
hashable data. This matters when we have pair<T*, U*> as a key, which is quite common in DenseMap, etc. To that end, we need to detect when this is safe. The requirements on a generic std::pair<T, U> are: 1) Both T and U must satisfy the existing is_hashable_data trait. Note that this includes the requirement that T and U have no internal padding bits or other bits not contributing directly to equality. 2) The alignment constraints of std::pair<T, U> do not require padding between consecutive objects. 3) The alignment constraints of U and the size of T do not conspire to require padding between the first and second elements. Grow two somewhat magical traits to detect this by forming a pod structure and inspecting offset artifacts on it. Hopefully this won't cause any compilers to panic. Added and adjusted tests now that pairs, even nested pairs, are treated as just sequences of data. Thanks to Jeffrey Yasskin for helping me sort through this and reviewing the somewhat subtle traits. llvm-svn: 151883
-
Chandler Carruth authored
an open question of whether we can do better than this by treating pairs as boring data containers and directly hashing the two subobjects. This at least makes the API reasonable. In order to make this change, I reorganized the header a bit. I lifted the declarations of the hash_value functions up to the top of the header with their doxygen comments as these are intended for users to interact with. They shouldn't have to wade through implementation details. I then defined them at the very end so that they could be defined in terms of hash_combine or any other hashing infrastructure. Added various pair-hashing unittests. llvm-svn: 151882
-
Chandler Carruth authored
the hash_code. I'm not sure what I was thinking here, the use cases for special values are in the *keys*, not in the hashes of those keys. We can always resurrect this if needed, or clients can accomplish the same goal themselves. This makes the general case somewhat faster (~5 cycles faster on my machine) and smaller with less branching. llvm-svn: 151865
-
Chandler Carruth authored
to keep this around -- updating golden tests is annoying otherwise. Thanks to Benjamin for pointing this omission out on IRC. llvm-svn: 151860
-
Chandler Carruth authored
do this initially, sorry. llvm-svn: 151857
-
- Mar 01, 2012
-
-
Chandler Carruth authored
of the proposed standard hashing interfaces (N3333), and to use a modified and tuned version of the CityHash algorithm. Some of the highlights of this change: -- Significantly higher quality hashing algorithm with very well distributed results, and extremely few collisions. Should be close to a checksum for up to 64-bit keys. Very little clustering or clumping of hash codes, to better distribute load on probed hash tables. -- Built-in support for reserved values. -- Simplified API that composes cleanly with other C++ idioms and APIs. -- Better scaling performance as keys grow. This is the fastest algorithm I've found and measured for moderately sized keys (such as show up in some of the uniquing and folding use cases) -- Support for enabling per-execution seeds to prevent table ordering or other artifacts of hashing algorithms to impact the output of LLVM. The seeding would make each run different and highlight these problems during bootstrap. This implementation was tested extensively using the SMHasher test suite, and pased with flying colors, doing better than the original CityHash algorithm even. I've included a unittest, although it is somewhat minimal at the moment. I've also added (or refactored into the proper location) type traits necessary to implement this, and converted users of GeneralHash over. My only immediate concerns with this implementation is the performance of hashing small keys. I've already started working to improve this, and will continue to do so. Currently, the only algorithms faster produce lower quality results, but it is likely there is a better compromise than the current one. Many thanks to Jeffrey Yasskin who did most of the work on the N3333 paper, pair-programmed some of this code, and reviewed much of it. Many thanks also go to Geoff Pike Pike and Jyrki Alakuijala, the original authors of CityHash on which this is heavily based, and Austin Appleby who created MurmurHash and the SMHasher test suite. Also thanks to Nadav, Tobias, Howard, Jay, Nick, Ahmed, and Duncan for all of the review comments! If there are further comments or concerns, please let me know and I'll jump on 'em. llvm-svn: 151822
-
- Feb 22, 2012
-
-
Jakob Stoklund Olesen authored
llvm-svn: 151163
-
Chandler Carruth authored
chip in r139383, and the PSP components of the triple are really annoying to parse. Let's leave this chapter behind. There is no reason to expect LLVM to see a PSP-related triple these days, and so no reasonable motivation to support them. It might be reasonable to prune a few of the older MIPS triple forms in general, but as those at least cause no burden on parsing (they aren't both a chip and an OS!), I'm happy to leave them in for now. llvm-svn: 151156
-
Jakob Stoklund Olesen authored
For objects that can be identified by small unsigned keys, SparseSet provides constant time clear() and fast deterministic iteration. Insert, erase, and find operations are typically faster than hash tables. SparseSet is useful for keeping information about physical registers, virtual registers, or numbered basic blocks. llvm-svn: 151110
-
- Feb 21, 2012
-
-
Chandler Carruth authored
construction. Simplify its interface, implementation, and users accordingly as there is no longer an 'uninitialized' state to check for. Also, fixes a bug lurking in the interface as there was one method that didn't correctly check for initialization. llvm-svn: 151024
-
- Feb 18, 2012
-
-
Talin authored
llvm-svn: 150890
-
- Feb 07, 2012
-
-
Benjamin Kramer authored
Clang miscompiles it under certain circumstances, and it's a good exercise for APInt. llvm-svn: 149986
-
- Feb 06, 2012
-
-
Chandler Carruth authored
some architectures. These are useful for interacting with multiarch or bi-arch GCC (or GCC-based) toolchains. llvm-svn: 149895
-
- Jan 31, 2012
-
-
Manuel Klimek authored
now that this handles the release / retain calls. Adds a regression test for that bug (which is a compile-time regression) and for the last two changes to the IntrusiveRefCntPtr, especially tests for the memory leak due to copy construction of the ref-counted object and ensuring that the traits are used for release / retain calls. llvm-svn: 149411
-
Chandler Carruth authored
These are very useful for frontends and other utilities reasoning about or selecting between triples. llvm-svn: 149353
-
- Jan 30, 2012
-
-
Talin authored
llvm-svn: 149229
-
- Jan 25, 2012
-
-
Talin authored
llvm-svn: 148881
-
- Jan 17, 2012
-
-
Jakob Stoklund Olesen authored
BitVector uses the native word size for its internal representation. That doesn't work well for literal bit masks in source code. This patch adds BitVector operations to efficiently apply literal bit masks specified as arrays of uint32_t. Since each array entry always holds exactly 32 bits, these portable bit masks can be source code literals, probably produced by TableGen. llvm-svn: 148272
-
- Dec 22, 2011
-
-
Eli Friedman authored
llvm-svn: 147186
-
- Dec 17, 2011
-
-
Chandler Carruth authored
make VariadicFunction actually be trivial. Do so, and also make it look more like your standard trivial functor by making it a struct with no access specifiers. The unit test is updated to initialize its functors properly. llvm-svn: 146827
-
- Dec 16, 2011
-
-
Dylan Noblesmith authored
Hexatridecimal was added in r139695. And fix the unittest that now triggers the assert. llvm-svn: 146754
-
Chandler Carruth authored
bit of style, sorry. llvm-svn: 146733
-
Chandler Carruth authored
variadic-like functions in C++98. See the comments in the header file for a more detailed description of how these work. We plan to use these extensively in the AST matching library. This code and idea were originally authored by Zhanyong Wan. I've condensed it using macros to reduce repeatition and adjusted it to fit better with LLVM's ADT. Thanks to both David Blaikie and Doug Gregor for the review! llvm-svn: 146729
-
- Nov 26, 2011
-
-
Eli Friedman authored
was returning incorrect values in rare cases, and incorrectly marking exact conversions as inexact in some more common cases. Fixes PR11406, and a missed optimization in test/CodeGen/X86/fp-stack-O0.ll. llvm-svn: 145141
-
- Oct 15, 2011
-
-
Benjamin Kramer authored
Based on Horspool's simplified version of Boyer-Moore. We use a constant-sized table of uint8_ts to keep cache thrashing low, needles bigger than 255 bytes are uncommon anyways. The worst case is still O(n*m) but we do a lot better on the average case now. llvm-svn: 142061
-
- Oct 13, 2011
-
-
Eli Friedman authored
llvm-svn: 141831
-
- Oct 12, 2011
-
-
Eli Friedman authored
Fix APFloat::getLargest so that it actually returns the correct value. Found by accident while reviewing a patch to nearby code. llvm-svn: 141816
-
- Oct 08, 2011
-
-
Eli Friedman authored
Fix APInt::operator*= so that it computes the correct result for large integers where there is unsigned overflow. Fix APFloat::toString so that it doesn't depend on the incorrect behavior in common cases (and computes the correct result in some rare cases). Fixes PR11086. llvm-svn: 141441
-
- Sep 30, 2011
-
-
Jakob Stoklund Olesen authored
Thanks to Alexandru Dura and Jonas Paulsson for finding it. llvm-svn: 140859
-
- Sep 14, 2011
-
-
Douglas Gregor authored
llvm-svn: 139695
-