[LLVMdev] Eliminating copies between overlapping register classes

Jakob Stoklund Olesen stoklund at 2pi.dk
Wed Feb 22 19:00:55 PST 2012


On Feb 22, 2012, at 12:01 PM, Tom Stellard wrote:

> Hi,
> 
> I have two register classes A and B, where A contains a subset of the
> registers in B:
> 
> A = [R0, R1, R2, ... R128]
> 
> B = [RO, R1, R2, ... R128,
>     T0, T1, T2, ... T128]
> 
> I am using the Greedy Register Allocator, and I would expect the register
> allocator to eliminate this copy:
> 
> %vreg0<def> = COPY %vreg1; B:%vreg0 A:%vreg1
> 
> but instead I end up with
> 
> %R0<def> = COPY %R1
> 
> Is there any way I can get the register allocator to eliminate these
> kinds of copies?

Such copies should be eliminated as aggressively as normal copies. Perhaps the debug output from RegisterCoalescer can tell you why they aren't.

/jakob





More information about the llvm-dev mailing list