summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2014-12-11 22:27:14 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2014-12-11 22:27:14 +0000
commit9ece3ce49038c775a207279691f50c5888c99d72 (patch)
tree6f82c926516bb3a5c81de3ba178e183f43622f60 /llvm/utils/TableGen/CodeGenDAGPatterns.cpp
parent58d502f0d47d594cf9ce6d98cbc872664f224c5f (diff)
downloadbcm5719-llvm-9ece3ce49038c775a207279691f50c5888c99d72.tar.gz
bcm5719-llvm-9ece3ce49038c775a207279691f50c5888c99d72.zip
Try to include operand counts for mismatches in tablegen.
llvm-svn: 224068
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r--llvm/utils/TableGen/CodeGenDAGPatterns.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
index e206b40250d..8b90d16d731 100644
--- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -1539,6 +1539,22 @@ static bool isOperandClass(const TreePatternNode *N, StringRef Class) {
return false;
}
+
+static void emitTooManyOperandsError(TreePattern &TP,
+ StringRef InstName,
+ unsigned Expected,
+ unsigned Actual) {
+ TP.error("Instruction '" + InstName + "' was provided " + Twine(Actual) +
+ " operands but expected only " + Twine(Expected) + "!");
+}
+
+static void emitTooFewOperandsError(TreePattern &TP,
+ StringRef InstName,
+ unsigned Actual) {
+ TP.error("Instruction '" + InstName +
+ "' expects more than the provided " + Twine(Actual) + " operands!");
+}
+
/// ApplyTypeConstraints - Apply all of the type constraints relevant to
/// this node and its children in the tree. This returns true if it makes a
/// change, false otherwise. If a type contradiction is found, flag an error.
@@ -1741,8 +1757,7 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) {
// Verify that we didn't run out of provided operands.
if (ChildNo >= getNumChildren()) {
- TP.error("Instruction '" + getOperator()->getName() +
- "' expects more operands than were provided.");
+ emitTooFewOperandsError(TP, getOperator()->getName(), getNumChildren());
return false;
}
@@ -1766,8 +1781,8 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) {
// And the remaining sub-operands against subsequent children.
for (unsigned Arg = 1; Arg < NumArgs; ++Arg) {
if (ChildNo >= getNumChildren()) {
- TP.error("Instruction '" + getOperator()->getName() +
- "' expects more operands than were provided.");
+ emitTooFewOperandsError(TP, getOperator()->getName(),
+ getNumChildren());
return false;
}
Child = getChild(ChildNo++);
@@ -1787,8 +1802,8 @@ bool TreePatternNode::ApplyTypeConstraints(TreePattern &TP, bool NotRegisters) {
}
if (!InstInfo.Operands.isVariadic && ChildNo != getNumChildren()) {
- TP.error("Instruction '" + getOperator()->getName() +
- "' was provided too many operands!");
+ emitTooManyOperandsError(TP, getOperator()->getName(),
+ ChildNo, getNumChildren());
return false;
}
OpenPOWER on IntegriCloud