aboutsummaryrefslogtreecommitdiffstats
path: root/utils/TableGen
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-08-09 08:19:00 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-08-09 08:19:00 +0000
commit72fa87f0cfe22faa575280dbac8dbc9225dfb12d (patch)
tree44b6984626a1f3bf291a00c1ed2133ed143ab786 /utils/TableGen
parenta62b02a7ef93d1fd4e09842c43074b88f559819a (diff)
downloadexternal_llvm-72fa87f0cfe22faa575280dbac8dbc9225dfb12d.zip
external_llvm-72fa87f0cfe22faa575280dbac8dbc9225dfb12d.tar.gz
external_llvm-72fa87f0cfe22faa575280dbac8dbc9225dfb12d.tar.bz2
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
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp
index f645854..a13bc4e 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;