diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-05-22 21:02:29 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-05-22 21:02:29 +0000 |
commit | 54ddf3d9c756881021afcb869a6ec892a21aef5b (patch) | |
tree | e5b4b0ef18f18b991b347ad1a9f1048b2e8ace3f /utils/TableGen | |
parent | 4c361972fd9110eff30145abdd17f195404a4e49 (diff) | |
download | llvm-54ddf3d9c756881021afcb869a6ec892a21aef5b.tar.gz llvm-54ddf3d9c756881021afcb869a6ec892a21aef5b.tar.bz2 llvm-54ddf3d9c756881021afcb869a6ec892a21aef5b.tar.xz |
tblgen/AsmMatcher: Change AsmOperandClass to allow a list of superclasses instead of just one.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104452 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r-- | utils/TableGen/AsmMatcherEmitter.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp index 1947824cbf..783c6b5aae 100644 --- a/utils/TableGen/AsmMatcherEmitter.cpp +++ b/utils/TableGen/AsmMatcherEmitter.cpp @@ -794,15 +794,19 @@ void AsmMatcherInfo::BuildOperandClasses(CodeGenTarget &Target) { ClassInfo *CI = AsmOperandClasses[*it]; CI->Kind = ClassInfo::UserClass0 + Index; - Init *Super = (*it)->getValueInit("SuperClass"); - if (DefInit *DI = dynamic_cast<DefInit*>(Super)) { + ListInit *Supers = (*it)->getValueAsListInit("SuperClasses"); + for (unsigned i = 0, e = Supers->getSize(); i != e; ++i) { + DefInit *DI = dynamic_cast<DefInit*>(Supers->getElement(i)); + if (!DI) { + PrintError((*it)->getLoc(), "Invalid super class reference!"); + continue; + } + ClassInfo *SC = AsmOperandClasses[DI->getDef()]; if (!SC) PrintError((*it)->getLoc(), "Invalid super class reference!"); else CI->SuperClasses.push_back(SC); - } else { - assert(dynamic_cast<UnsetInit*>(Super) && "Unexpected SuperClass field!"); } CI->ClassName = (*it)->getValueAsString("Name"); CI->Name = "MCK_" + CI->ClassName; |