forked from OSchip/llvm-project
[RegisterBankInfo] Add a verify method for the PartialMapping helper class.
This verifies that the PartialMapping can be accomadated into the related register bank. llvm-svn: 265555
This commit is contained in:
parent
1dcb91b4de
commit
2423fc419c
|
@ -52,6 +52,11 @@ public:
|
|||
|
||||
/// Print this partial mapping on \p OS;
|
||||
void print(raw_ostream &OS) const;
|
||||
|
||||
/// Check that the Mask is compatible with the RegBank.
|
||||
/// Indeed, if the RegBank cannot accomadate the "active bits" of the mask,
|
||||
/// there is no way this mapping is valid.
|
||||
void verify() const;
|
||||
};
|
||||
|
||||
/// Helper struct that represents how a value is mapped through
|
||||
|
|
|
@ -181,6 +181,25 @@ void RegisterBankInfo::PartialMapping::dump() const {
|
|||
dbgs() << '\n';
|
||||
}
|
||||
|
||||
void RegisterBankInfo::PartialMapping::verify() const {
|
||||
assert(RegBank && "Register bank not set");
|
||||
// Check what is the minimum width that will live into RegBank.
|
||||
// RegBank will have to, at least, accomodate all the bits between the first
|
||||
// and last bits active in Mask.
|
||||
// If Mask is zero, then ActiveWidth is 0.
|
||||
unsigned ActiveWidth = 0;
|
||||
// Otherwise, remove the trailing and leading zeros from the bitwidth.
|
||||
// 0..0 ActiveWidth 0..0.
|
||||
if (Mask.getBoolValue())
|
||||
ActiveWidth = Mask.getBitWidth() - Mask.countLeadingZeros() -
|
||||
Mask.countTrailingZeros();
|
||||
(void)ActiveWidth;
|
||||
assert(ActiveWidth <= Mask.getBitWidth() &&
|
||||
"Wrong computation of ActiveWidth, overflow?");
|
||||
assert(RegBank->getSize() >= ActiveWidth &&
|
||||
"Register bank too small for Mask");
|
||||
}
|
||||
|
||||
void RegisterBankInfo::PartialMapping::print(raw_ostream &OS) const {
|
||||
SmallString<128> MaskStr;
|
||||
Mask.toString(MaskStr, /*Radix*/ 2, /*Signed*/ 0, /*formatAsCLiteral*/ true);
|
||||
|
|
Loading…
Reference in New Issue