[TableGen] Merge the SuperClass Record and SMRange vector a single vector. This removes the state needed to manage the extract vector. NFC

llvm-svn: 258066
This commit is contained in:
Craig Topper 2016-01-18 19:52:54 +00:00
parent 0e41d0b963
commit 2576124eb5
3 changed files with 17 additions and 18 deletions

View File

@ -1072,9 +1072,9 @@ createArgument(const Record &Arg, StringRef Attr,
if (!Ptr) {
// Search in reverse order so that the most-derived type is handled first.
ArrayRef<Record*> Bases = Search->getSuperClasses();
for (const auto *Base : llvm::make_range(Bases.rbegin(), Bases.rend())) {
if ((Ptr = createArgument(Arg, Attr, Base)))
ArrayRef<std::pair<Record*, SMRange>> Bases = Search->getSuperClasses();
for (const auto &Base : llvm::make_range(Bases.rbegin(), Bases.rend())) {
if ((Ptr = createArgument(Arg, Attr, Base.first)))
break;
}
}
@ -1381,7 +1381,7 @@ static void emitClangAttrTypeArgList(RecordKeeper &Records, raw_ostream &OS) {
if (Args.empty())
continue;
if (Args[0]->getSuperClasses().back()->getName() != "TypeArgument")
if (Args[0]->getSuperClasses().back().first->getName() != "TypeArgument")
continue;
// All these spellings take a single type argument.
@ -1419,7 +1419,7 @@ static void emitClangAttrArgContextList(RecordKeeper &Records, raw_ostream &OS)
static bool isIdentifierArgument(Record *Arg) {
return !Arg->getSuperClasses().empty() &&
llvm::StringSwitch<bool>(Arg->getSuperClasses().back()->getName())
llvm::StringSwitch<bool>(Arg->getSuperClasses().back().first->getName())
.Case("IdentifierArgument", true)
.Case("EnumArgument", true)
.Case("VariadicEnumArgument", true)
@ -1476,13 +1476,13 @@ void EmitClangAttrClass(RecordKeeper &Records, raw_ostream &OS) {
if (!R.getValueAsBit("ASTNode"))
continue;
ArrayRef<Record *> Supers = R.getSuperClasses();
ArrayRef<std::pair<Record *, SMRange>> Supers = R.getSuperClasses();
assert(!Supers.empty() && "Forgot to specify a superclass for the attr");
std::string SuperName;
for (const auto *Super : llvm::make_range(Supers.rbegin(), Supers.rend())) {
const Record &R = *Super;
if (R.getName() != "TargetSpecificAttr" && SuperName.empty())
SuperName = R.getName();
for (const auto &Super : llvm::make_range(Supers.rbegin(), Supers.rend())) {
const Record *R = Super.first;
if (R->getName() != "TargetSpecificAttr" && SuperName.empty())
SuperName = R->getName();
}
OS << "class " << R.getName() << "Attr : public " << SuperName << " {\n";

View File

@ -152,13 +152,12 @@ static bool beforeThanCompareGroups(const GroupInfo *LHS, const GroupInfo *RHS){
}
static SMRange findSuperClassRange(const Record *R, StringRef SuperName) {
ArrayRef<Record *> Supers = R->getSuperClasses();
for (size_t i = 0, e = Supers.size(); i < e; ++i)
if (Supers[i]->getName() == SuperName)
return R->getSuperClassRanges()[i];
return SMRange();
ArrayRef<std::pair<Record *, SMRange>> Supers = R->getSuperClasses();
auto I = std::find_if(Supers.begin(), Supers.end(),
[&](const std::pair<Record *, SMRange> &SuperPair) {
return SuperPair.first->getName() == SuperName;
});
return (I != Supers.end()) ? I->second : SMRange();
}
/// \brief Invert the 1-[0/1] mapping of diags to group into a one to many

View File

@ -1926,7 +1926,7 @@ void NeonEmitter::createIntrinsic(Record *R,
ClassKind CK = ClassNone;
if (R->getSuperClasses().size() >= 2)
CK = ClassMap[R->getSuperClasses()[1]];
CK = ClassMap[R->getSuperClasses()[1].first];
std::vector<std::pair<TypeSpec, TypeSpec>> NewTypeSpecs;
for (auto TS : TypeSpecs) {