diff options
author | Matthias Braun <matze@braunis.de> | 2016-12-05 06:00:46 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2016-12-05 06:00:46 +0000 |
commit | ddbd6db5175717b71a46f421b306df4690f70ed8 (patch) | |
tree | 842feada38d271a2c238df8ea511c5c021ba6683 /lib/TableGen | |
parent | 205e9501a0d4e20c01ab6c4ce7e963eb40299859 (diff) |
TableGen: Use StringInit instead of std::string for DagInit arg names
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288644 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/TableGen')
-rw-r--r-- | lib/TableGen/Record.cpp | 24 | ||||
-rw-r--r-- | lib/TableGen/TGParser.cpp | 17 | ||||
-rw-r--r-- | lib/TableGen/TGParser.h | 2 |
3 files changed, 22 insertions, 21 deletions
diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp index 2744d4f656f..2875375f4cd 100644 --- a/lib/TableGen/Record.cpp +++ b/lib/TableGen/Record.cpp @@ -829,7 +829,7 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const { if (!LOp || !ROp || LOp->getDef() != ROp->getDef()) PrintFatalError("Concated Dag operators do not match!"); std::vector<Init*> Args; - std::vector<std::string> ArgNames; + std::vector<StringInit*> ArgNames; for (unsigned i = 0, e = LHSs->getNumArgs(); i != e; ++i) { Args.push_back(LHSs->getArg(i)); ArgNames.push_back(LHSs->getArgName(i)); @@ -1021,10 +1021,10 @@ static Init *ForeachHelper(Init *LHS, Init *MHS, Init *RHS, RecTy *Type, Type, CurRec, CurMultiClass)) Val = Result; - std::vector<std::pair<Init *, std::string> > args; + std::vector<std::pair<Init *, StringInit*> > args; for (unsigned int i = 0; i < MHSd->getNumArgs(); ++i) { Init *Arg = MHSd->getArg(i); - std::string ArgName = MHSd->getArgName(i); + StringInit *ArgName = MHSd->getArgName(i); // Process args if (Init *Result = EvaluateOperation(RHSo, LHS, Arg, Type, @@ -1525,23 +1525,23 @@ Init *FieldInit::resolveReferences(Record &R, const RecordVal *RV) const { static void ProfileDagInit(FoldingSetNodeID &ID, Init *V, StringInit *VN, ArrayRef<Init *> ArgRange, - ArrayRef<std::string> NameRange) { + ArrayRef<StringInit *> NameRange) { ID.AddPointer(V); ID.AddPointer(VN); - ArrayRef<Init *>::iterator Arg = ArgRange.begin(); - ArrayRef<std::string>::iterator Name = NameRange.begin(); + ArrayRef<Init *>::iterator Arg = ArgRange.begin(); + ArrayRef<StringInit *>::iterator Name = NameRange.begin(); while (Arg != ArgRange.end()) { assert(Name != NameRange.end() && "Arg name underflow!"); ID.AddPointer(*Arg++); - ID.AddString(*Name++); + ID.AddPointer(*Name++); } assert(Name == NameRange.end() && "Arg name overflow!"); } DagInit * DagInit::get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange, - ArrayRef<std::string> NameRange) { + ArrayRef<StringInit *> NameRange) { static FoldingSet<DagInit> ThePool; static std::vector<DagInit*> TheActualPool; @@ -1560,9 +1560,9 @@ DagInit::get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange, DagInit * DagInit::get(Init *V, StringInit *VN, - const std::vector<std::pair<Init*, std::string> > &args) { + const std::vector<std::pair<Init*, StringInit*> > &args) { std::vector<Init *> Args; - std::vector<std::string> Names; + std::vector<StringInit *> Names; for (const auto &Arg : args) { Args.push_back(Arg.first); @@ -1602,10 +1602,10 @@ std::string DagInit::getAsString() const { Result += ":" + ValName->getAsUnquotedString(); if (!Args.empty()) { Result += " " + Args[0]->getAsString(); - if (!ArgNames[0].empty()) Result += ":$" + ArgNames[0]; + if (ArgNames[0]) Result += ":$" + ArgNames[0]->getAsUnquotedString(); for (unsigned i = 1, e = Args.size(); i != e; ++i) { Result += ", " + Args[i]->getAsString(); - if (!ArgNames[i].empty()) Result += ":$" + ArgNames[i]; + if (ArgNames[i]) Result += ":$" + ArgNames[i]->getAsUnquotedString(); } } return Result + ")"; diff --git a/lib/TableGen/TGParser.cpp b/lib/TableGen/TGParser.cpp index cbee2e3289b..690cbf929c8 100644 --- a/lib/TableGen/TGParser.cpp +++ b/lib/TableGen/TGParser.cpp @@ -1428,7 +1428,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType, Lex.Lex(); // eat the VarName. } - std::vector<std::pair<llvm::Init*, std::string> > DagArgs; + std::vector<std::pair<llvm::Init*, StringInit*> > DagArgs; if (Lex.getCode() != tgtok::r_paren) { DagArgs = ParseDagArgList(CurRec); if (DagArgs.empty()) return nullptr; @@ -1603,30 +1603,31 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) { /// DagArg ::= VARNAME /// DagArgList ::= DagArg /// DagArgList ::= DagArgList ',' DagArg -std::vector<std::pair<llvm::Init*, std::string> > +std::vector<std::pair<llvm::Init*, StringInit*> > TGParser::ParseDagArgList(Record *CurRec) { - std::vector<std::pair<llvm::Init*, std::string> > Result; + std::vector<std::pair<llvm::Init*, StringInit*> > Result; while (true) { // DagArg ::= VARNAME if (Lex.getCode() == tgtok::VarName) { // A missing value is treated like '?'. - Result.emplace_back(UnsetInit::get(), Lex.getCurStrVal()); + StringInit *VarName = StringInit::get(Lex.getCurStrVal()); + Result.emplace_back(UnsetInit::get(), VarName); Lex.Lex(); } else { // DagArg ::= Value (':' VARNAME)? Init *Val = ParseValue(CurRec); if (!Val) - return std::vector<std::pair<llvm::Init*, std::string> >(); + return std::vector<std::pair<llvm::Init*, StringInit*> >(); // If the variable name is present, add it. - std::string VarName; + StringInit *VarName = nullptr; if (Lex.getCode() == tgtok::colon) { if (Lex.Lex() != tgtok::VarName) { // eat the ':' TokError("expected variable name in dag literal"); - return std::vector<std::pair<llvm::Init*, std::string> >(); + return std::vector<std::pair<llvm::Init*, StringInit*> >(); } - VarName = Lex.getCurStrVal(); + VarName = StringInit::get(Lex.getCurStrVal()); Lex.Lex(); // eat the VarName. } diff --git a/lib/TableGen/TGParser.h b/lib/TableGen/TGParser.h index 4b163e67bc1..f1460aa21b3 100644 --- a/lib/TableGen/TGParser.h +++ b/lib/TableGen/TGParser.h @@ -175,7 +175,7 @@ private: // Parser methods. IDParseMode Mode = ParseValueMode); std::vector<Init*> ParseValueList(Record *CurRec, Record *ArgsRec = nullptr, RecTy *EltTy = nullptr); - std::vector<std::pair<llvm::Init*, std::string> > ParseDagArgList(Record *); + std::vector<std::pair<llvm::Init*, StringInit*> > ParseDagArgList(Record *); bool ParseOptionalRangeList(std::vector<unsigned> &Ranges); bool ParseOptionalBitList(std::vector<unsigned> &Ranges); std::vector<unsigned> ParseRangeList(); |