Index: lib/Target/ARM/AsmParser/ARMAsmParser.cpp
===================================================================
--- lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -10074,6 +10074,7 @@
   // to only report the widest one.
   std::multimap<unsigned, unsigned> OperandMissesSeen;
   SmallSet<uint64_t, 4> FeatureMissesSeen;
+  bool ReportedTooFewOperands = false;
 
   // Process the near-misses in reverse order, so that we see more general ones
   // first, and so can avoid emitting more specific ones.
@@ -10196,9 +10197,12 @@
       break;
     }
     case NearMissInfo::NearMissTooFewOperands: {
-      SMLoc EndLoc = ((ARMOperand &)*Operands.back()).getEndLoc();
-      NearMissesOut.emplace_back(
-          NearMissMessage{ EndLoc, StringRef("too few operands for instruction") });
+      if (!ReportedTooFewOperands) {
+        SMLoc EndLoc = ((ARMOperand &)*Operands.back()).getEndLoc();
+        NearMissesOut.emplace_back(NearMissMessage{
+            EndLoc, StringRef("too few operands for instruction")});
+        ReportedTooFewOperands = true;
+      }
       break;
     }
     case NearMissInfo::NoNearMiss:
Index: test/MC/ARM/diagnostics.s
===================================================================
--- test/MC/ARM/diagnostics.s
+++ test/MC/ARM/diagnostics.s
@@ -733,3 +733,9 @@
 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
 @ CHECK-ERRORS: error: immediate operand must a number in the range [0, 255]
 @ CHECK-ERRORS: error: immediate operand must an even number in the range [0, 30]
+
+        @ Generic error for too few operands
+        adds
+        adds r0
+@ CHECK-ERRORS: error: too few operands for instruction
+@ CHECK-ERRORS: error: too few operands for instruction
Index: test/MC/ARM/ldrd-strd-gnu-bad-inst.s
===================================================================
--- test/MC/ARM/ldrd-strd-gnu-bad-inst.s
+++ test/MC/ARM/ldrd-strd-gnu-bad-inst.s
@@ -2,26 +2,26 @@
 
   .text
   .thumb
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   strd
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   ldrd
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   strd r0
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   ldrd r0
 @ CHECK: error: invalid instruction
   strd s0, [r0]
 @ CHECK: error: invalid instruction
   ldrd s0, [r0]
   .arm
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   strd
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   ldrd
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   strd r0
-@ CHECK: error: invalid instruction
+@ CHECK: error: too few operands for instruction
   ldrd r0
 @ CHECK: error: invalid instruction
   strd s0, [r0]
Index: test/MC/ARM/thumb-diagnostics.s
===================================================================
--- test/MC/ARM/thumb-diagnostics.s
+++ test/MC/ARM/thumb-diagnostics.s
@@ -351,3 +351,12 @@
 @ CHECK-ERRORS: error: invalid instruction
 @ CHECK-ERRORS: error: invalid instruction
 @ CHECK-ERRORS: error: invalid instruction
+
+@------------------------------------------------------------------------------
+@ Generic error for too few operands
+@------------------------------------------------------------------------------
+
+        adds
+        adds r0
+@ CHECK-ERRORS: error: too few operands for instruction
+@ CHECK-ERRORS: error: too few operands for instruction
Index: test/MC/ARM/thumb2-diagnostics.s
===================================================================
--- test/MC/ARM/thumb2-diagnostics.s
+++ test/MC/ARM/thumb2-diagnostics.s
@@ -145,3 +145,9 @@
 @ CHECK-ERRORS-V7: error: instruction requires: arm-mode
 @ CHECK-ERRORS-V8: error: invalid instruction
 @ CHECK-ERRORS-V8: error: invalid instruction
+
+        @ Generic error for too few operands
+        adds
+        adds r0
+@ CHECK-ERRORS: error: too few operands for instruction
+@ CHECK-ERRORS: error: too few operands for instruction
Index: utils/TableGen/AsmMatcherEmitter.cpp
===================================================================
--- utils/TableGen/AsmMatcherEmitter.cpp
+++ utils/TableGen/AsmMatcherEmitter.cpp
@@ -3296,7 +3296,7 @@
     OS << "            DEBUG_WITH_TYPE(\"asm-matcher\", dbgs() << \"recording too-few-operands near miss\\n\");\n";
     OS << "            OperandNearMiss =\n";
     OS << "                NearMissInfo::getTooFewOperands(Formal, it->Opcode);\n";
-    OS << "          } else {\n";
+    OS << "          } else if (OperandNearMiss.getKind() != NearMissInfo::NearMissTooFewOperands) {\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";