aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-10-30 18:48:18 +0000
committerChris Lattner <sabre@nondot.org>2010-10-30 18:48:18 +0000
commit7fd4489de11bdf06f6c852d42abafea013b76f28 (patch)
tree9c3f24f835dfdd9e1e0839a20ec40fecec7dcf6d
parenta47b265b1a63cacec50b3936cb1477e9a6810376 (diff)
emit the mnemonic aliases in their own helper function instead of
inline into MatchInstructionImpl. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117826 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp
index 99a32d8a00..93d3ac304e 100644
--- a/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/utils/TableGen/AsmMatcherEmitter.cpp
@@ -1515,23 +1515,28 @@ static void EmitComputeAvailableFeatures(CodeGenTarget &Target,
}
/// EmitMnemonicAliases - If the target has any MnemonicAlias<> definitions,
-/// emit them.
-static void EmitMnemonicAliases(raw_ostream &OS) {
+/// emit a function for them and return true, otherwise return false.
+static bool EmitMnemonicAliases(raw_ostream &OS) {
+ OS << "static void ApplyMnemonicAliases(StringRef &Mnemonic, "
+ "unsigned Features) {\n";
+
std::vector<Record*> Aliases =
Records.getAllDerivedDefinitions("MnemonicAlias");
- if (Aliases.empty()) return;
+ if (Aliases.empty()) return false;
- OS << " // Process all MnemonicAliases to remap the mnemonic.\n";
std::vector<StringMatcher::StringPair> Cases;
for (unsigned i = 0, e = Aliases.size(); i != e; ++i) {
Record *R = Aliases[i];
Cases.push_back(std::make_pair(R->getValueAsString("FromMnemonic"),
"Mnemonic = \"" +
R->getValueAsString("ToMnemonic") +
- "\"; break;"));
+ "\"; return;"));
}
StringMatcher("Mnemonic", Cases, OS).Emit();
+ OS << "}\n";
+
+ return true;
}
void AsmMatcherEmitter::run(raw_ostream &OS) {
@@ -1617,6 +1622,9 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << "\n#ifdef GET_MATCHER_IMPLEMENTATION\n";
OS << "#undef GET_MATCHER_IMPLEMENTATION\n\n";
+ // Generate the function that remaps for mnemonic aliases.
+ bool HasMnemonicAliases = EmitMnemonicAliases(OS);
+
// Generate the unified function to convert operands into an MCInst.
EmitConvertToMCInst(Target, Info.Instructions, OS);
@@ -1725,7 +1733,10 @@ void AsmMatcherEmitter::run(raw_ostream &OS) {
OS << " StringRef Mnemonic = ((" << Target.getName()
<< "Operand*)Operands[0])->getToken();\n\n";
- EmitMnemonicAliases(OS);
+ if (HasMnemonicAliases) {
+ OS << " // Process all MnemonicAliases to remap the mnemonic.\n";
+ OS << " ApplyMnemonicAliases(Mnemonic, AvailableFeatures);\n\n";
+ }
// Emit code to compute the class list for this operand vector.
OS << " // Eliminate obvious mismatches.\n";