diff options
-rw-r--r-- | llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp | 14 |
2 files changed, 6 insertions, 12 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h b/llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h index 57137ec5fb8..a7e0b15faac 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/RegBankSelect.h @@ -71,6 +71,7 @@ namespace llvm { // Forward declarations. class MachineRegisterInfo; +class TargetRegisterInfo; /// This pass implements the reg bank selector pass used in the GlobalISel /// pipeline. At the end of this pass, all register operands have been assigned @@ -87,6 +88,9 @@ private: /// pass uses and updates. MachineRegisterInfo *MRI; + /// Information on the register classes for the current function. + const TargetRegisterInfo *TRI; + /// Helper class used for every code morphing. MachineIRBuilder MIRBuilder; diff --git a/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp b/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp index b4179233036..4e0650e04f9 100644 --- a/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp +++ b/llvm/lib/CodeGen/GlobalISel/RegBankSelect.cpp @@ -33,6 +33,7 @@ void RegBankSelect::init(MachineFunction &MF) { RBI = MF.getSubtarget().getRegBankInfo(); assert(RBI && "Cannot work without RegisterBankInfo"); MRI = &MF.getRegInfo(); + TRI = MF.getSubtarget().getRegisterInfo(); MIRBuilder.setMF(MF); } @@ -43,18 +44,7 @@ bool RegBankSelect::assignmentMatch( if (ValMapping.BreakDown.size() > 1) return false; - const RegClassOrRegBank &CurAssignment = MRI->getRegClassOrRegBank(Reg); - // Nothing assigned, the assignment does not match. - if (!CurAssignment) - return false; - // Get the register bank form the current assignment. - const RegisterBank *CurRegBank = nullptr; - if (CurAssignment.is<const TargetRegisterClass *>()) - CurRegBank = &RBI->getRegBankFromRegClass( - *CurAssignment.get<const TargetRegisterClass *>()); - else - CurRegBank = CurAssignment.get<const RegisterBank *>(); - return CurRegBank == ValMapping.BreakDown[0].RegBank; + return RBI->getRegBank(Reg, *MRI, *TRI) == ValMapping.BreakDown[0].RegBank; } unsigned |