From 01095a5d43bbfde13731688ddcf6048ebb8b7721 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sat, 23 Jul 2016 20:41:05 +0000 Subject: Vendor import of llvm release_39 branch r276489: https://llvm.org/svn/llvm-project/llvm/branches/release_39@276489 --- lib/CodeGen/TargetRegisterInfo.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'lib/CodeGen/TargetRegisterInfo.cpp') diff --git a/lib/CodeGen/TargetRegisterInfo.cpp b/lib/CodeGen/TargetRegisterInfo.cpp index 0a7042ac3db5..e1d90cb913e5 100644 --- a/lib/CodeGen/TargetRegisterInfo.cpp +++ b/lib/CodeGen/TargetRegisterInfo.cpp @@ -112,18 +112,11 @@ TargetRegisterInfo::getAllocatableClass(const TargetRegisterClass *RC) const { if (!RC || RC->isAllocatable()) return RC; - const unsigned *SubClass = RC->getSubClassMask(); - for (unsigned Base = 0, BaseE = getNumRegClasses(); - Base < BaseE; Base += 32) { - unsigned Idx = Base; - for (unsigned Mask = *SubClass++; Mask; Mask >>= 1) { - unsigned Offset = countTrailingZeros(Mask); - const TargetRegisterClass *SubRC = getRegClass(Idx + Offset); - if (SubRC->isAllocatable()) - return SubRC; - Mask >>= Offset; - Idx += Offset + 1; - } + for (BitMaskClassIterator It(RC->getSubClassMask(), *this); It.isValid(); + ++It) { + const TargetRegisterClass *SubRC = getRegClass(It.getID()); + if (SubRC->isAllocatable()) + return SubRC; } return nullptr; } @@ -388,6 +381,15 @@ bool TargetRegisterInfo::needsStackRealignment( return false; } +bool TargetRegisterInfo::regmaskSubsetEqual(const uint32_t *mask0, + const uint32_t *mask1) const { + unsigned N = (getNumRegs()+31) / 32; + for (unsigned I = 0; I < N; ++I) + if ((mask0[I] & mask1[I]) != mask0[I]) + return false; + return true; +} + #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) void TargetRegisterInfo::dumpReg(unsigned Reg, unsigned SubRegIndex, -- cgit v1.3