llvm-mc/AsmParser: Add hack to ignore Int_* and *_Int instructions for now, to
authorDaniel Dunbar <daniel@zuster.org>
Sun, 9 Aug 2009 08:19:00 +0000 (08:19 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sun, 9 Aug 2009 08:19:00 +0000 (08:19 +0000)
make it easier to see interesting ambiguities.
 - Also, check that user doesn't try to redefine the super class. This is a wart
   in the current design, in that assembler match classes aren't explicitly
   declared somewhere (so there isn't a unique place to declare the super
   class). This should probably be fixed.

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

utils/TableGen/AsmMatcherEmitter.cpp

index f6458541105f8ce29784a785e64118d3b236a2e2..a13bc4e0b953da2f6289e4a60750ab19082b02a9 100644 (file)
@@ -225,6 +225,12 @@ static bool IsAssemblerInstruction(const StringRef &Name,
   if (Name == "PHI")
     return false;
 
+  // Ignore "Int_*" and "*_Int" instructions, which are internal aliases.
+  //
+  // FIXME: This is a total hack.
+  if (StringRef(Name).startswith("Int_") || StringRef(Name).endswith("_Int"))
+    return false;
+
   // Ignore instructions with no .s string.
   //
   // FIXME: What are these?
@@ -571,6 +577,7 @@ AsmMatcherInfo::getOperandClass(const StringRef &Token,
     Entry = new ClassInfo();
     if (ClassName == "Reg") {
       Entry->Kind = ClassInfo::Register;
+      Entry->SuperClassKind = SuperClass;
     } else {
       Entry->Kind = getUserClassKind(ClassName);
       Entry->SuperClassKind = SuperClass;
@@ -581,6 +588,10 @@ AsmMatcherInfo::getOperandClass(const StringRef &Token,
     Entry->PredicateMethod = "is" + ClassName;
     Entry->RenderMethod = "add" + ClassName + "Operands";
     Classes.push_back(Entry);
+  } else {
+    // Verify the super class matches.
+    assert(SuperClass == Entry->SuperClassKind &&
+           "Cannot redefine super class kind!");
   }
   
   return Entry;