summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorOliver Stannard <oliver.stannard@arm.com>2017-12-04 13:42:22 +0000
committerOliver Stannard <oliver.stannard@arm.com>2017-12-04 13:42:22 +0000
commit9d9981028dddec4c227cfce9feccbb66fbc1aa41 (patch)
tree52e31357e3821d26be19b4560b4c26230a82b1c1 /utils
parentc7ae88e8a9ca2481e0b43c82dd26431cdad6534c (diff)
Revert r319649 - [Asm, ARM] Add fallback diag for multiple invalid operands
This is causing a failure in the llvm-clang-x86_64-expensive-checks-win buildbot, and I can't reproduce it locally, so reverting until I can work out what is wrong. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319654 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp
index 7739e4462b4..72fb53053fd 100644
--- a/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/utils/TableGen/AsmMatcherEmitter.cpp
@@ -3275,6 +3275,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " NearMissInfo FeaturesNearMiss = NearMissInfo::getSuccess();\n";
OS << " NearMissInfo EarlyPredicateNearMiss = NearMissInfo::getSuccess();\n";
OS << " NearMissInfo LatePredicateNearMiss = NearMissInfo::getSuccess();\n";
+ OS << " bool MultipleInvalidOperands = false;\n";
}
if (HasMnemonicFirst) {
@@ -3313,12 +3314,11 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " OperandNearMiss =\n";
OS << " NearMissInfo::getTooFewOperands(Formal, it->Opcode);\n";
OS << " } else if (OperandNearMiss.getKind() != NearMissInfo::NearMissTooFewOperands) {\n";
- OS << " // An invalid operand plus a missing one at the end are reported the\n";
- OS << " // same way as multiple invalid operands.\n";
+ OS << " // If more than one operand is invalid, give up on this match entry.\n";
OS << " DEBUG_WITH_TYPE(\n";
OS << " \"asm-matcher\",\n";
OS << " dbgs() << \"second invalid operand, giving up on this opcode\\n\");\n";
- OS << " OperandNearMiss = NearMissInfo::getMissedMultipleOperands(it->Opcode);\n";
+ OS << " MultipleInvalidOperands = true;\n";
OS << " break;\n";
OS << " }\n";
OS << " } else {\n";
@@ -3387,7 +3387,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " DEBUG_WITH_TYPE(\n";
OS << " \"asm-matcher\",\n";
OS << " dbgs() << \"second operand mismatch, skipping this opcode\\n\");\n";
- OS << " OperandNearMiss = NearMissInfo::getMissedMultipleOperands(it->Opcode);\n";
+ OS << " MultipleInvalidOperands = true;\n";
OS << " break;\n";
OS << " }\n";
OS << " }\n\n";
@@ -3409,14 +3409,15 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " }\n\n";
}
- if (!ReportMultipleNearMisses) {
+ if (ReportMultipleNearMisses)
+ OS << " if (MultipleInvalidOperands) {\n";
+ else
OS << " if (!OperandsValid) {\n";
- OS << " DEBUG_WITH_TYPE(\"asm-matcher\", dbgs() << \"Opcode result: multiple \"\n";
- OS << " \"operand mismatches, ignoring \"\n";
- OS << " \"this opcode\\n\");\n";
- OS << " continue;\n";
- OS << " }\n";
- }
+ OS << " DEBUG_WITH_TYPE(\"asm-matcher\", dbgs() << \"Opcode result: multiple \"\n";
+ OS << " \"operand mismatches, ignoring \"\n";
+ OS << " \"this opcode\\n\");\n";
+ OS << " continue;\n";
+ OS << " }\n";
// Emit check that the required features are available.
OS << " if ((AvailableFeatures & it->RequiredFeatures) "