[LLVMdev] Eliminating copies between overlapping register classes
Tom Stellard
thomas.stellard at amd.com
Thu Feb 23 09:50:45 PST 2012
On Wed, Feb 22, 2012 at 07:00:55PM -0800, Jakob Stoklund Olesen wrote:
>
> 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
Thanks for the debugging type, I caught my mistake. Class A wasn't
actually a subset of B. The definitions were actually like this:
A = [R0, R1, R2, ... R128, CC]
B = [RO, R1, R2, ... R128,
T0, T1, T2, ... T128
Thanks,
Tom
More information about the llvm-dev
mailing list