summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/AsmMatcherEmitter.cpp
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2011-01-26 21:43:46 +0000
committerBob Wilson <bob.wilson@apple.com>2011-01-26 21:43:46 +0000
commit770681d7b67f4aa7078aacf1cb165a83ead94526 (patch)
treeedf311daba87b7a961783760bcc74d2bf249d599 /llvm/utils/TableGen/AsmMatcherEmitter.cpp
parentb370bf329a3a23de0404c1c04175494b2e1a3289 (diff)
downloadbcm5719-llvm-770681d7b67f4aa7078aacf1cb165a83ead94526.tar.gz
bcm5719-llvm-770681d7b67f4aa7078aacf1cb165a83ead94526.zip
Add a MnemonicIsValid method to the asm matcher.
Patch by Bill Wendling. llvm-svn: 124328
Diffstat (limited to 'llvm/utils/TableGen/AsmMatcherEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/AsmMatcherEmitter.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index 97cc3ff3db6..a04428c4c60 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -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"
OpenPOWER on IntegriCloud