[LLVMdev] Register Dependencies and Register Allocation

Chris Lattner clattner at apple.com
Tue Dec 23 11:22:11 PST 2008


On Dec 23, 2008, at 11:03 AM, Marc de Kruijf wrote:

>
> I'm writing a back-end for an architecture that supports multi-word  
> loads.  As a concrete example, "ldqw r0, [addr]" would load a  
> quadword (4 words) into 4 registers starting with r0 (implicit  
> writes to r1, r2, and r3).
>
> First, is there any currently supported architecture that has  
> anything like this?  I suspect not.  If not, I hope someone might  
> help me figure out how to make this work, particularly with the  
> cooperation of the register allocator?  In particular, I need the  
> register allocator to understand that there are multiple, contiguous  
> register assignments, and that their locations are moreover  
> dependent on the specified initial input register.
>
> I thought about defining a set of special register classes to group  
> contiguous registers for each load size (2, 4, and 8), but this  
> doesn't feel very satisfying.  Is this the right approach?  I'm  
> wondering if it would work, and if so, if it would also still be  
> efficient.

Probably the best way to handle this is with subregs.  Just define a  
register file with these "super registers" and say that they alias the  
4 individual registers.  This is how the sparc backend handles its FP  
register file (where one double reg is 2 float regs).

-Chris 



More information about the llvm-dev mailing list