[AArch64] Teach RegisterBankInfo about the CC register bank.
authorQuentin Colombet <qcolombet@apple.com>
Thu, 7 Apr 2016 00:39:29 +0000 (00:39 +0000)
committerQuentin Colombet <qcolombet@apple.com>
Thu, 7 Apr 2016 00:39:29 +0000 (00:39 +0000)
We need to cover each register class with a register bank.

llvm-svn: 265629

llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp
llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h

index 5f70c4b..07a29eb 100644 (file)
@@ -51,6 +51,15 @@ AArch64RegisterBankInfo::AArch64RegisterBankInfo(const TargetRegisterInfo &TRI)
   assert(RBFPR.getSize() == 512 &&
          "FPRs should hold up to 512-bit via QQQQ sequence");
 
+  // Initialize the CCR bank.
+  createRegisterBank(AArch64::CCRRegBankID, "CCR");
+  addRegBankCoverage(AArch64::CCRRegBankID, AArch64::CCRRegClassID, TRI);
+  const RegisterBank &RBCCR = getRegBank(AArch64::CCRRegBankID);
+  (void)RBCCR;
+  assert(RBCCR.contains(*TRI.getRegClass(AArch64::CCRRegClassID)) &&
+         "Class not added?");
+  assert(RBCCR.getSize() == 32 && "CCR should hold up to 32-bit");
+
   verify(TRI);
 }
 
@@ -94,6 +103,8 @@ const RegisterBank &AArch64RegisterBankInfo::getRegBankFromRegClass(
   case AArch64::WSeqPairsClassRegClassID:
   case AArch64::XSeqPairsClassRegClassID:
     return getRegBank(AArch64::FPRRegBankID);
+  case AArch64::CCRRegClassID:
+    return getRegBank(AArch64::CCRRegBankID);
   default:
     llvm_unreachable("Register class not supported");
   }
index c58d452..156f9a0 100644 (file)
@@ -24,6 +24,7 @@ namespace AArch64 {
 enum {
   GPRRegBankID = 0, /// General Purpose Registers: W, X.
   FPRRegBankID = 1, /// Floating Point/Vector Registers: B, H, S, D, Q.
+  CCRRegBankID = 2, /// Conditional register: NZCV.
   NumRegisterBanks
 };
 } // End AArch64 namespace.