From 72fa87f0cfe22faa575280dbac8dbc9225dfb12d Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sun, 9 Aug 2009 08:19:00 +0000 Subject: [PATCH] llvm-mc/AsmParser: Add hack to ignore Int_* and *_Int instructions for now, to 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index f6458541105..a13bc4e0b95 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -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; -- 2.34.1