1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

TableGen: Move getNewAnonymousName into RecordKeeper

Summary:
So that we will be able to generate new anonymous names more easily
outside the parser as well.

Change-Id: I28f396a7bdbc3ff0c665d466abbd3d31376e21b4

Reviewers: arsenm, craig.topper, tra, MartinO

Subscribers: wdng, llvm-commits

Differential Revision: https://reviews.llvm.org/D43755

llvm-svn: 326787
This commit is contained in:
Nicolai Haehnle 2018-03-06 13:48:54 +00:00
parent b28dc096d7
commit 7c9274885f
4 changed files with 17 additions and 17 deletions

View File

@ -1506,6 +1506,7 @@ class RecordKeeper {
using RecordMap = std::map<std::string, std::unique_ptr<Record>>;
RecordMap Classes, Defs;
FoldingSet<RecordRecTy> RecordTypePool;
unsigned AnonCounter = 0;
public:
const RecordMap &getClasses() const { return Classes; }
@ -1535,6 +1536,8 @@ public:
assert(Ins && "Record already exists");
}
Init *getNewAnonymousName();
//===--------------------------------------------------------------------===//
// High-level helper methods, useful for tablegen backends...

View File

@ -1834,6 +1834,12 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const RecordKeeper &RK) {
return OS;
}
/// GetNewAnonymousName - Generate a unique anonymous name that can be used as
/// an identifier.
Init *RecordKeeper::getNewAnonymousName() {
return StringInit::get("anonymous_" + utostr(AnonCounter++));
}
std::vector<Record *>
RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const {
Record *Class = getClass(ClassName);

View File

@ -406,7 +406,7 @@ bool TGParser::ProcessForeachDefs(Record *CurRec, SMLoc Loc, IterSet &IterVals){
if (!IterRec->isAnonymous())
return Error(Loc, "def already exists: " +IterRec->getNameInitAsString());
IterRec->setName(GetNewAnonymousName());
IterRec->setName(Records.getNewAnonymousName());
}
Record *IterRecSave = IterRec.get(); // Keep a copy before release.
@ -427,12 +427,6 @@ static bool isObjectStart(tgtok::TokKind K) {
K == tgtok::MultiClass || K == tgtok::Foreach;
}
/// GetNewAnonymousName - Generate a unique anonymous name that can be used as
/// an identifier.
Init *TGParser::GetNewAnonymousName() {
return StringInit::get("anonymous_" + utostr(AnonCounter++));
}
/// ParseObjectName - If an object name is specified, return it. Otherwise,
/// return 0.
/// ObjectName ::= Value [ '#' Value ]*
@ -1364,8 +1358,9 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
SMLoc EndLoc = Lex.getLoc();
// Create the new record, set it as CurRec temporarily.
auto NewRecOwner = llvm::make_unique<Record>(GetNewAnonymousName(), NameLoc,
Records, /*IsAnonymous=*/true);
auto NewRecOwner =
make_unique<Record>(Records.getNewAnonymousName(), NameLoc, Records,
/*IsAnonymous=*/true);
Record *NewRec = NewRecOwner.get(); // Keep a copy since we may release.
SCRef.RefRange = SMRange(NameLoc, EndLoc);
SCRef.Rec = Class;
@ -2158,8 +2153,8 @@ bool TGParser::ParseDef(MultiClass *CurMultiClass) {
if (Name)
CurRecOwner = make_unique<Record>(Name, DefLoc, Records);
else
CurRecOwner = llvm::make_unique<Record>(GetNewAnonymousName(), DefLoc,
Records, /*IsAnonymous=*/true);
CurRecOwner = make_unique<Record>(Records.getNewAnonymousName(), DefLoc,
Records, /*IsAnonymous=*/true);
Record *CurRec = CurRecOwner.get(); // Keep a copy since we may release.
if (!CurMultiClass && Loops.empty()) {
@ -2504,7 +2499,7 @@ Record *TGParser::InstantiateMulticlassDef(MultiClass &MC, Record *DefProto,
bool IsAnonymous = false;
if (!DefmPrefix) {
DefmPrefix = GetNewAnonymousName();
DefmPrefix = Records.getNewAnonymousName();
IsAnonymous = true;
}

View File

@ -68,8 +68,6 @@ class TGParser {
// Record tracker
RecordKeeper &Records;
unsigned AnonCounter;
// A "named boolean" indicating how to parse identifiers. Usually
// identifiers map to some existing object but in special cases
// (e.g. parsing def names) no such object exists yet because we are
@ -84,7 +82,7 @@ class TGParser {
public:
TGParser(SourceMgr &SrcMgr, RecordKeeper &records)
: Lex(SrcMgr), CurMultiClass(nullptr), Records(records), AnonCounter(0) {}
: Lex(SrcMgr), CurMultiClass(nullptr), Records(records) {}
/// ParseFile - Main entrypoint for parsing a tblgen file. These parser
/// routines return true on error, or false on success.
@ -110,8 +108,6 @@ private: // Semantic analysis methods.
bool AddSubMultiClass(MultiClass *CurMC,
SubMultiClassReference &SubMultiClass);
Init *GetNewAnonymousName();
// IterRecord: Map an iterator name to a value.
struct IterRecord {
VarInit *IterVar;