[llvm-dev] Interest in fast BitVector? (original) (raw)

David Greene via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 20 10:19:59 PDT 2018


Some time ago I developed a fast BitVector class to use in some research here. It uses expression templates to fuse operation loops and runs much faster than the existing BitVector for some important use-cases. It also has the ability to efficiently report if a BitVector's contents changed after some operation. For example:

ETBitVector A = ... ETBitVector B = ... ETBitVector C = ...

bool Changed = A.assign(A & B | ~C); // Bit operation loops fused

Using this resulted in 100x or more speedup over BitVector. Obviously, the speedup is greater the more operations are chained together. For a simple A.assign(A & B) it wouldn't be terribly faster. But the ability to report a change efficiently can be useful even for simple operations.

I based this off an old version of BitVector. At the time it was a drop-in replacement but it would need some updating to conform to the current BitVector interface.

Before I do that work, is there any interest in this?

                           -David


More information about the llvm-dev mailing list