Changed the TableGen created MatchInstructionImpl() setting of ErrorInfo.
authorKevin Enderby <enderby@apple.com>
Wed, 2 Feb 2011 18:20:55 +0000 (18:20 +0000)
committerKevin Enderby <enderby@apple.com>
Wed, 2 Feb 2011 18:20:55 +0000 (18:20 +0000)
The algorithm for identifying which operand is invalid will now always point to
some operand and not the mnemonic sometimes.  The change is now that ErrorInfo
is the index of the highest operand that does not match for any of the matching
mnemonics records.  And no longer the ~0U value when the mnemonic matches and
not every record with a matching mnemonic has the same mismatching operand
index.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124734 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/AsmMatcherEmitter.cpp

index a04428c4c60b9864d579aa8f83093e3dcc763302..76904de75137fdcb8c1790af0ef658711025774a 100644 (file)
@@ -2098,10 +2098,8 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
   OS << "        continue;\n";
   OS << "      // If this operand is broken for all of the instances of this\n";
   OS << "      // mnemonic, keep track of it so we can report loc info.\n";
-  OS << "      if (it == MnemonicRange.first || ErrorInfo == i+1)\n";
+  OS << "      if (it == MnemonicRange.first || ErrorInfo <= i+1)\n";
   OS << "        ErrorInfo = i+1;\n";
-  OS << "      else\n";
-  OS << "        ErrorInfo = ~0U;";
   OS << "      // Otherwise, just reject this instance of the mnemonic.\n";
   OS << "      OperandsValid = false;\n";
   OS << "      break;\n";