[llvm] r265727 - [RegBankSelect] Reuse RegisterBankInfo logic to get to the register bank

Quentin Colombet via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 7 14:32:23 PDT 2016


Author: qcolombet
Date: Thu Apr  7 16:32:23 2016
New Revision: 265727

URL: http://llvm.org/viewvc/llvm-project?rev=265727&view=rev
Log:
[RegBankSelect] Reuse RegisterBankInfo logic to get to the register bank
from a register.
On top of duplicating the logic, it was buggy! It would assert on
physical registers, since MachineRegisterInfo does not have any
information regarding register classes/banks for them.

Modified:
    llvm/trunk/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
    llvm/trunk/lib/CodeGen/GlobalISel/RegBankSelect.cpp

Modified: llvm/trunk/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/RegBankSelect.h?rev=265727&r1=265726&r2=265727&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/GlobalISel/RegBankSelect.h (original)
+++ llvm/trunk/include/llvm/CodeGen/GlobalISel/RegBankSelect.h Thu Apr  7 16:32:23 2016
@@ -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;
 

Modified: llvm/trunk/lib/CodeGen/GlobalISel/RegBankSelect.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/RegBankSelect.cpp?rev=265727&r1=265726&r2=265727&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/RegBankSelect.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/RegBankSelect.cpp Thu Apr  7 16:32:23 2016
@@ -33,6 +33,7 @@ void RegBankSelect::init(MachineFunction
   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




More information about the llvm-commits mailing list