diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2017-12-04 13:42:22 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2017-12-04 13:42:22 +0000 |
commit | 9d9981028dddec4c227cfce9feccbb66fbc1aa41 (patch) | |
tree | 52e31357e3821d26be19b4560b4c26230a82b1c1 /utils | |
parent | c7ae88e8a9ca2481e0b43c82dd26431cdad6534c (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.cpp | 23 |
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) " |