[llvm-commits] [PATCH] Don't -join-cross-class-copies of physical and virtual registers
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Apr 23 22:19:07 PDT 2009
On 23/04/2009, at 22.40, Evan Cheng wrote:
> Unfortunately your patch will disable some of the functionalities for
> X86. See the comments:
>
> // This is not an insert_subreg but it looks like one.
> // e.g. %reg1024:4 = MOV32rr %EAX
>
> That means reg1024 is a 64-bit register. EAX is not in the register
> class but we want to coalesce this by assigning RAX to reg1024.
I don't know how I managed to overlook that. Thanks.
It seems there are two orthogonal issues here. One is the use of
subreg operands, the other is register classes. Both can be relevant
at the same time. For instance
> %reg1024:4 = MOV32rr %ESI
would be illegal to coalesce if %reg1024 is GR64_. The subregister
%reg1024:4 has class GR32_, and %ESI is not in that class.
With the current check in differingRegisterClasses, could this be
accidentally coalesced?:
%reg1024:1 = MOV8rr %reg1025:2
If both registers are GR16_, differingRegisterClasses returns false.
> Can you find another solution?
Yes. I will have another go. I think the issue of subreg operands and
that of regclasses should be handled separately.
Thanks again,
/jakob
More information about the llvm-commits
mailing list