[RegisterBankInfo] Provide a default constructor for InstructionMapping

helper class.

The default constructor creates invalid (isValid() == false) instances
and may be used to communicate that a mapping was not found.

llvm-svn: 265699
This commit is contained in:
Quentin Colombet 2016-04-07 17:30:18 +00:00
parent b869289cf3
commit 5b7ba5092c
2 changed files with 18 additions and 0 deletions

View File

@ -96,11 +96,19 @@ public:
/// The rationale is that it is more efficient for the optimizers
/// to be able to assume that the mapping of the ith operand is
/// at the index i.
///
/// \pre ID != InvalidMappingID
InstructionMapping(unsigned ID, unsigned Cost, unsigned NumOperands)
: ID(ID), Cost(Cost), NumOperands(NumOperands) {
assert(getID() != InvalidMappingID &&
"Use the default constructor for invalid mapping");
OperandsMapping.reset(new ValueMapping[getNumOperands()]);
}
/// Default constructor.
/// Use this constructor to express that the mapping is invalid.
InstructionMapping() : ID(InvalidMappingID), Cost(0), NumOperands(0) {}
/// Get the cost.
unsigned getCost() const { return Cost; }
@ -120,6 +128,10 @@ public:
getOperandMapping(i) = ValMapping;
}
/// Check whether this object is valid.
/// This is a lightweight check for obvious wrong instance.
bool isValid() const { return getID() != InvalidMappingID; }
/// Verifiy that this mapping makes sense for \p MI.
void verify(const MachineInstr &MI) const;
};
@ -224,6 +236,11 @@ public:
/// Make sure not to use that identifier to avoid possible collision.
static const unsigned DefaultMappingID;
/// Identifier used when the related instruction mapping instance
/// is generated by the default constructor.
/// Make sure not to use that identifier.
static const unsigned InvalidMappingID;
/// Get the mapping of the different operands of \p MI
/// on the register bank.
/// This mapping should be the direct translation of \p MI.

View File

@ -31,6 +31,7 @@
using namespace llvm;
const unsigned RegisterBankInfo::DefaultMappingID = UINT_MAX;
const unsigned RegisterBankInfo::InvalidMappingID = UINT_MAX - 1;
/// Get the size in bits of the \p OpIdx-th operand of \p MI.
///