[LLVMdev] [PATCH]: Add SparseBitmap implementation

Daniel Berlin dberlin at dberlin.org
Tue Sep 4 07:35:10 PDT 2007


On 9/4/07, Dan Gohman <djg at cray.com> wrote:
> On Fri, Aug 31, 2007 at 08:10:33PM -0400, Daniel Berlin wrote:
> > Suggestions, criticisms, etc, are welcome.
>
> I haven't studied the implementation, but I have a few comments on
> the interface, and some style comments, below.
>
> > Index: include/llvm/ADT/SparseBitmap.h
> > ===================================================================
> > --- include/llvm/ADT/SparseBitmap.h   (revision 0)
> > +++ include/llvm/ADT/SparseBitmap.h   (revision 0)
> > @@ -0,0 +1,571 @@
> > +//===- llvm/ADT/SparseBitmap.h - Efficient Sparse Bitmap ----*- C++ -*-===//
>
> Add '-'s to make the first line line exactly 80 cols.
Will do

>
> > +/// SparseBitmap is an implementation of a bitvector that is sparse by only
> > +/// storing the elements that have non-zero bits set.  In order to make this
>
> I'd like to suggest the name SparseBitVector for this class, to
> correspond with the name of the existing BitVector class, which has
> a similar interface, but isn't sparse.

Sure, i have no problem with that.

>
> > +    SparseBitmapElement(unsigned Idx) {
>
> This misses an explicit keyword.
>
Fixed!

> > +        if (Bitmap.Elements.empty())
> > +          {
> > +            AtEnd = true;
> > +            return;
> > +          }
>
> Here and a few other places miss reformatting.

Fixed.  Anyone have a better .emacs for the indentation than the one in tools?
>
> > +  template <int ElementSize>
> > +  class SparseBitmap {
>
> Do you expect clients will often want custom ElementSize values? Otherwise,
> it seems like this template parameter should be given a default value, or
> even just removed from the API.

So, actually, at least in GCC, we discovered that we could speed up
some dataflow problems a lot with varying the element size to 256, and
on the other size, interference graphs could be reduced in space and
time a lot by varying the element size down to 64
I'm happy to give it a default value of 128.

>
> > +      bool AtEnd;
> > +
> > +      SparseBitmap<ElementSize> &Bitmap;
> > +
> > +      // Current element inside of bitmap
> > +      ElementListConstIter Iter;
> > +
> > +      // Current bit number inside of our bitmap
> > +      unsigned BitNumber;
> > +
> > +      // Current word number inside of our element
> > +      unsigned WordNumber;
> > +
> > +      // Current bits from the element.
> > +      typename SparseBitmapElement<ElementSize>::BitWord Bits;
>
> Can these SparseBitmapIterator members, and a few more that follow,
> be made private?

They were intended to be, sorry.

>
> > +      SparseBitmapIterator(SparseBitmap<ElementSize> &RHS,
> > +                           bool end = false):Bitmap(RHS) {
>
> This appears to miss an explicit keyword.

Fixed.



More information about the llvm-dev mailing list