diff options
Diffstat (limited to 'llvm/lib/CodeGen/RegisterBank.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/RegisterBank.cpp | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/llvm/lib/CodeGen/RegisterBank.cpp b/llvm/lib/CodeGen/RegisterBank.cpp index 8e0a0b0dc282..bdc6df78fd3d 100644 --- a/llvm/lib/CodeGen/RegisterBank.cpp +++ b/llvm/lib/CodeGen/RegisterBank.cpp @@ -20,19 +20,8 @@ using namespace llvm; -const unsigned RegisterBank::InvalidID = UINT_MAX; - -RegisterBank::RegisterBank(unsigned ID, const char *Name, - const uint32_t *CoveredClasses, - unsigned NumRegClasses) - : ID(ID), Name(Name) { - ContainedRegClasses.resize(NumRegClasses); - ContainedRegClasses.setBitsInMask(CoveredClasses); -} - bool RegisterBank::verify(const RegisterBankInfo &RBI, const TargetRegisterInfo &TRI) const { - assert(isValid() && "Invalid register bank"); for (unsigned RCId = 0, End = TRI.getNumRegClasses(); RCId != End; ++RCId) { const TargetRegisterClass &RC = *TRI.getRegClass(RCId); @@ -61,14 +50,7 @@ bool RegisterBank::verify(const RegisterBankInfo &RBI, } bool RegisterBank::covers(const TargetRegisterClass &RC) const { - assert(isValid() && "RB hasn't been initialized yet"); - return ContainedRegClasses.test(RC.getID()); -} - -bool RegisterBank::isValid() const { - return ID != InvalidID && Name != nullptr && - // A register bank that does not cover anything is useless. - !ContainedRegClasses.empty(); + return (CoveredClasses[RC.getID() / 32] & (1U << RC.getID() % 32)) != 0; } bool RegisterBank::operator==(const RegisterBank &OtherRB) const { @@ -91,15 +73,18 @@ void RegisterBank::print(raw_ostream &OS, bool IsForDebug, OS << getName(); if (!IsForDebug) return; + + unsigned Count = 0; + for (int i = 0, e = ((NumRegClasses + 31) / 32); i != e; ++i) + Count += llvm::popcount(CoveredClasses[i]); + OS << "(ID:" << getID() << ")\n" - << "isValid:" << isValid() << '\n' - << "Number of Covered register classes: " << ContainedRegClasses.count() - << '\n'; + << "Number of Covered register classes: " << Count << '\n'; // Print all the subclasses if we can. // This register classes may not be properly initialized yet. - if (!TRI || ContainedRegClasses.empty()) + if (!TRI || NumRegClasses == 0) return; - assert(ContainedRegClasses.size() == TRI->getNumRegClasses() && + assert(NumRegClasses == TRI->getNumRegClasses() && "TRI does not match the initialization process?"); OS << "Covered register classes:\n"; ListSeparator LS; |
