Fwd: Register classes

Caroline Tice ctice@apple.com
Wed Aug 18 18:16:00 GMT 2004


Oops, I forgot to copy the list on this message...

Begin forwarded message:

> From: Caroline Tice <ctice@apple.com>
> Date: August 18, 2004 10:55:43 AM PDT
> To: Daniel Berlin <dberlin@dberlin.org>
> Subject: Re: Register classes
>
> If you are planning on doing some work on the register allocator, 
> there was an EXCELLENT paper in
> PLDI this year (ACM Conference on Programming Language Design and 
> Implementation) on
> updating Chaitin's algorithm to work well on modern architectures.  I 
> would strongly recommend you read it, if you haven't already.  I can 
> send you a copy if you like.  Below is my summary of the paper:
>
> A Generalized Algorithm for Graph-Coloring Register Allocation
> by M.D. Smith, N. Ramsey and G. Holloway
>
> Expanding Chaitin's graph coloring algorithm to work on real hardware 
> architectures (taking into account
> register classes, overlapping between register classes, register 
> aliasing, etc).  Basically, Chaitin said a
> node in the coloring graph was trivially colorable if the number of 
> neighbors of N, "degree(N)" was less
> than the number of registers on the machine.  The new formula says   
> node is trivially colorable is
>  "squeeze (N)" is less than the number of registers actually available 
> for allocation, where squeeze (N) is
> the number of registers that N's neighbors will actually need.  The 
> rest of the paper is the concerned with
> accurately defining "squeeze (N)" and "number of registers actually 
> available for allocation" taking the
> various hardware architectures and constraints into account.
>
> -- Caroline Tice
> ctice@apple.com
>
> On Aug 18, 2004, at 10:39 AM, Daniel Berlin wrote:
>
>> A whole lot of ports seem to have register classes that contain 
>> registers that can't possibly be used together.
>> They also have to seem weird groupings of registers that don't make 
>> sense to be used by any single pseudo.
>>
>> What exactly is the goal of these register classes?
>> Is it to work around bad allocation decisions by the register 
>> allocator/regclass (IE get regclass to choose this new class as the 
>> preferred class so that the allocator makes a better decision later 
>> on)?
>>
>> I recently had another discussion with Gregory Chaitan about register 
>> allocation, and two things he was adamant about (that I was also 
>> somewhat strong feeling, but not as adamant about during design of 
>> new-ra):
>>
>> 1. The interference graph should represent all interference 
>> constraints necessary to do allocation in some way.  IE for variables 
>> that need multiple registers, this needs to be represented in the 
>> interference graph in some way (through either extra or weighted 
>> edges).
>> IE you should need nothing but a single bit test to determine whether 
>> two variables can share a register or not.
>> New-ra didn't follow this, and it became quite messy to try to 
>> determine whether two variables actually interfered, and what the 
>> possible registers we could use for these variables were.  This took 
>> away most of the benefits of using an interference graph in the first 
>> place.
>>
>> 2. That a lot of parameterization be done properly, so that costs are 
>> done right for each thing, and the allocator can make the right 
>> decisions.
>>
>>
>> In our case, that means that register classes (if we keep them) 
>> should represent only one thing, whereas right now it seems they can 
>> represent one of three things:
>>
>> 1. The set of registers possible for some given mode/usage.
>> 2. The set of registers good (but not all possibly usable registers 
>> for that mode/usage are included) for some given mode/usage.
>> 3. The set of registers good (but including  unusable registers for 
>> that mode/usage) are included.
>>
>> Have I missed anything (I haven't touched new-ra or old-ra in a year 
>> or so, so it's possibly i've lost it).
>> --Dan
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 3974 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20040818/8532ad9d/attachment.bin>


More information about the Gcc mailing list