[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