Peter Bergner wrote:
On Mon, 2008-04-28 at 16:01 -0400, Vladimir Makarov wrote:
Thanks, Peter. That was clever and email is very enlightening. I have analogous idea for more compact conflict matrix representation. IRA builds allocno live ranges first (they are ranges of program points where the allocno lives). I can use this information for fast searching potential conflicts to sort the allocnos. Probably the matrix will be even more compact because live ranges contain more detail info than basic blocks where the local allocnos live. For example, the ranges even can show that allocnos local in the same block will never conflicts. It means that matrix even for fppp can be compressed.

You say you use your analogous idea now?  Can you point me to the code?
I thought I heard you (maybe someone else?) that your conflict information
was much bigger than old mainline.  If this is true and you are compacting
the bit matrix like I am, why is it so big?


I am currently working on bit matrix compression. It is not implemented yet. I hope it will be ready in a week.

Live ranges were implemented long ago. They are quit important for fast transformation of regional IR into one region IR (before this I just rebuilt IR which was simple code but very time consuming). IRA can create additional allocnos because of live range splitting on the region borders and remove some of them during the transformation. The transformation is complicated because allocnos on upper levels of the region tree accumulate a lot of info (including conflicts) from allocnos on lower levels.
I tried to use sparsets for the same purposes (only for maintaining and processing allocnos currently living). But usage of sparsets for this purposes gave practically nothing (I had to use valgrind lackey to see the difference). Therefore I decided not to introduce the additional data and use just bitmaps for this.

Sparsets already exists in a compiler. I am thinking about their usage too. May be you have a benchmark where the sparsets give a visible compiler speed improvement (my favorite was combine.i). I'd appreciate if you point me such benchmark. It could help me to make a decision to use sparsets.

Yes, I added the sparseset implementation that has been in since gcc 4.3.
Did you use my sparseset implementation or did you write your own for your
tests?  I don't recall which file(s) I saw the difference on.  All I recall
is I tried it both ways, saw a difference somewhere and promptly threw the
slower code away along with which file(s) I saw the difference on.  Sorry I
can't be of more help.

I had own implementation which I used for YARA project.
Given how sparsesets are implemented, I cannot see how they could ever be
slower than bitmaps for the use of "live", but I can see how they might be
faster.  That said, if your allocator is spending enough time elsewhere,
then I can easily imagine the difference being swamped such that you don't
see any difference at all.


Yes, that is true. I found that the code using sparsets (or bitmaps) are far away to be a bottleneck.

Reply via email to