| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
| |
A lot of code is duplicated between the first_last and the
next / prev methods. All of this code can be shared if they
are implemented in terms of find_first_in(Begin, End) etc,
in which case find_first = find_first_in(0, Size) and find_next
is find_first_in(Prev+1, Size), with similar reductions for
the other methods.
Differential Revision: https://reviews.llvm.org/D33104
llvm-svn: 303269
|
|
|
|
|
|
| |
Differential revision: https://reviews.llvm.org/D32060
llvm-svn: 303227
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This almost completes the matrix of all possible find
functions.
*EXISTING*
----------
find_first
find_first_unset
find_next
find_next_unset
find_last
find_last_unset
*NEW*
----
find_prev
*STILL MISSING*
---------------
find_prev_unset
Differential Revision: https://reviews.llvm.org/D32885
llvm-svn: 302254
|
|
|
|
|
|
|
| |
Fixes some spelling mistakes, uses a helper function, and
adds an additional test case.
llvm-svn: 302208
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D32302
llvm-svn: 301014
|
|
|
|
|
|
|
|
|
| |
This was failing due to the use of assigning a Mask to an
unsigned, rather than to a BitWord. But most systems do not
have sizeof(unsigned) == sizeof(unsigned long), so the mask
was getting truncated.
llvm-svn: 300857
|
|
|
|
|
|
|
| |
This is causing test failures on Linux / BSD systems. Reverting
while I investigate.
llvm-svn: 300852
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D32244
llvm-svn: 300848
|
|
|
|
| |
llvm-svn: 299873
|
|
|
|
|
|
|
|
|
|
|
|
| |
BitVector had methods for searching for the first and next
set bits, but it did not have analagous methods for finding
the first and next unset bits. This is useful when your ones
and zeros are grouped together and you want to iterate over
ranges of ones and zeros.
Differential Revision: https://reviews.llvm.org/D31802
llvm-svn: 299857
|
|
|
|
|
|
| |
Addendum to r292575
llvm-svn: 292817
|
|
|
|
|
|
|
|
| |
Current implementation leaves the object in an invalid state.
This reverts commit bf0c389ac683cd6c0e5959b16537e59e5f4589e3.
llvm-svn: 272965
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
64-bit builds
and assert when mask is too large to apply in the small case,
previously the extra words were silently ignored.
clang-format the entire function to match current code standards.
This is a rewrite of r247972 which was reverted in r247983 due to
warning and possible UB on 32-bits hosts.
llvm-svn: 247993
|
|
|
|
|
|
| |
is undefined behavior on implementations where uinptr_t is 32-bits. One such platform is Windows, MSVC, x86.
llvm-svn: 247983
|
|
|
|
|
|
|
| |
We can't apply two words of 32-bit mask in the small case
where the internal storage is just one 32-bit word.
llvm-svn: 247974
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and 64-bit builds.
Extend mask value to 64 bits before taking its complement and assert when mask is
too large to apply in the small case (previously the extra words were silently ignored).
http://reviews.llvm.org/D11890
Patch by James Touton!
llvm-svn: 247972
|
|
|
|
| |
llvm-svn: 197647
|
|
|
|
|
|
| |
This reverts commit r187248. It broke many bots.
llvm-svn: 187254
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both GCC and LLVM will implicitly define __ppc__ and __powerpc__ for
all PowerPC targets, whether 32- or 64-bit. They will both implicitly
define __ppc64__ and __powerpc64__ for 64-bit PowerPC targets, and not
for 32-bit targets. We cannot be sure that all other possible
compilers used to compile Clang/LLVM define both __ppc__ and
__powerpc__, for example, so it is best to check for both when relying
on either inside the Clang/LLVM code base.
This patch makes sure we always check for both variants. In addition,
it fixes one unnecessary check in lib/Target/PowerPC/PPCJITInfo.cpp.
(At least one of __ppc__ and __powerpc__ should always be defined when
compiling for a PowerPC target, no matter which compiler is used, so
testing for them is unnecessary.)
There are some places in the compiler that check for other variants,
like __POWERPC__ and _POWER, and I have left those in place. There is
no need to add them elsewhere. This seems to be in Apple-specific
code, and I won't take a chance on breaking it.
There is no intended change in behavior; thus, no test cases are
added.
llvm-svn: 187248
|
|
|
|
| |
llvm-svn: 186123
|
|
|
|
| |
llvm-svn: 183525
|
|
|
|
| |
llvm-svn: 183521
|
|
|
|
|
|
| |
boundary condition for checking if I and E were in the same word were incorrect, and, beyond that, the mask computation was not using a wide enough constant.
llvm-svn: 166015
|
|
|
|
|
|
| |
setting/resetting of ranges of bits, particularly useful when dealing with very large BitVector's.
llvm-svn: 165984
|
|
|
|
|
|
| |
magic and bring SmallBitVector up to date.
llvm-svn: 158600
|
|
|
|
|
|
|
| |
Returning a temporary BitVector is very expensive. If you must, create
the temporary explicitly: Use BitVector(A).flip() instead of ~A.
llvm-svn: 156768
|
|
|
|
|
|
| |
The existing operation (A & B).any() is very slow.
llvm-svn: 156760
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 114830
|
|
|
|
|
|
| |
and fix a bug in BitVector's reference proxy class which this exposed.
llvm-svn: 102768
|
|
|
|
| |
llvm-svn: 95779
|
|
|
|
|
|
|
| |
restriction in BitVector for |= and ^= that the operand must be the
same length.
llvm-svn: 95768
|
|
|
|
|
|
|
|
|
| |
It fails with a release build only, for reasons
as yet unknown. (If there's a better way to Xfail
things here let me know, doesn't seem to be any
prior art in unittests.)
llvm-svn: 95700
|
|
a single pointer (PointerIntPair) member. In "small" mode, the
pointer field is reinterpreted as a set of bits. In "large" mode,
the pointer points to a heap-allocated object.
Also, give BitVector empty and swap functions.
And, add some simple unittests for BitVector and SmallBitVector.
llvm-svn: 92730
|