forked from OSchip/llvm-project
[TargetRegisterInfo] Re-apply r265734.
Original commit message: [TargetRegisterInfo] Refactor the code to use BitMaskClassIterator. llvm-svn: 265764
This commit is contained in:
parent
2fbe04e93d
commit
e57546de40
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue