[llvm-dev] Misuse of MRI.getRegClass in multiple target's FastIsel code
Krzysztof Parzyszek via llvm-dev
llvm-dev at lists.llvm.org
Fri Sep 23 08:30:01 PDT 2016
MachineRegisterInfo::getRegClass does take a virtual register and
returns the TargetRegisterClass of that register. You're thinking about
TargetRegisterInfo::getRegClass.
-Krzysztof
On 9/23/2016 10:20 AM, Craig Topper via llvm-dev wrote:
> This code or subtle variations of it appears in multiple targets. It
> tries to convert from a register to a register class using getRegClass,
> but getRegClass is really supposed to take a register class enum value
> and get the register class object for it. It doesn't convert a register
> to a class. In fact there's not always a single or canonical class for a
> given register.
>
> What is the right way to do this?
>
> unsigned SrcReg = Reg + VA.getValNo();
> unsigned DestReg = VA.getLocReg();
> // Avoid a cross-class copy. This is very unlikely.
> if (!MRI.getRegClass(SrcReg)->contains(DestReg))
> return false;
>
>
> ~Craig
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
More information about the llvm-dev
mailing list