Add a MnemonicIsValid method to the asm matcher.
authorBob Wilson <bob.wilson@apple.com>
Wed, 26 Jan 2011 21:43:46 +0000 (21:43 +0000)
committerBob Wilson <bob.wilson@apple.com>
Wed, 26 Jan 2011 21:43:46 +0000 (21:43 +0000)
Patch by Bill Wendling.

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

utils/TableGen/AsmMatcherEmitter.cpp

index 97cc3ff3db6245568c1e7baccee8bb5f725efb94..a04428c4c60b9864d579aa8f83093e3dcc763302 100644 (file)
@@ -1897,6 +1897,7 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
   OS << "    Match_Success, Match_MnemonicFail, Match_InvalidOperand,\n";
   OS << "    Match_MissingFeature\n";
   OS << "  };\n";
+  OS << "  bool MnemonicIsValid(StringRef Mnemonic);\n";
   OS << "  MatchResultTy MatchInstructionImpl(\n";
   OS << "    const SmallVectorImpl<MCParsedAsmOperand*> &Operands,\n";
   OS << "    MCInst &Inst, unsigned &ErrorInfo);\n\n";
@@ -2013,6 +2014,16 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
 
   OS << "};\n\n";
 
+  // A method to determine if a mnemonic is in the list.
+  OS << "bool " << Target.getName() << ClassName << "::\n"
+     << "MnemonicIsValid(StringRef Mnemonic) {\n";
+  OS << "  // Search the table.\n";
+  OS << "  std::pair<const MatchEntry*, const MatchEntry*> MnemonicRange =\n";
+  OS << "    std::equal_range(MatchTable, MatchTable+"
+     << Info.Matchables.size() << ", Mnemonic, LessOpcode());\n";
+  OS << "  return MnemonicRange.first != MnemonicRange.second;\n";
+  OS << "}\n\n";
+
   // Finally, build the match function.
   OS << Target.getName() << ClassName << "::MatchResultTy "
      << Target.getName() << ClassName << "::\n"