summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h17
-rw-r--r--llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp1
2 files changed, 18 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h b/llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
index 9077758d453..e5109751490 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
@@ -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.
diff --git a/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp b/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp
index d8f97b153ab..a13d2a86912 100644
--- a/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp
@@ -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.
///
OpenPOWER on IntegriCloud