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?
Thanks,
Tom
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
If you upgrade to trunk, TableGen will automatically synthesize a register class representing the intersection.
/jakob