[llvm-dev] Misuse of MRI.getRegClass in multiple target's FastIsel code

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 23 08:20:29 PDT 2016


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160923/3927db50/attachment.html>


More information about the llvm-dev mailing list