emit the mnemonic aliases in their own helper function instead of
authorChris Lattner <sabre@nondot.org>
Sat, 30 Oct 2010 18:48:18 +0000 (18:48 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 30 Oct 2010 18:48:18 +0000 (18:48 +0000)
inline into MatchInstructionImpl.

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

utils/TableGen/AsmMatcherEmitter.cpp

index 99a32d8a000a310806e783729366669336ac1353..93d3ac304ea392cdd4783ed360c3852c85e6ea89 100644 (file)
@@ -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";