1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

TableGen: Use StringInit instead of std::string for DagInit name

llvm-svn: 288643
This commit is contained in:
Matthias Braun 2016-12-05 06:00:41 +00:00
parent 520d3c4f83
commit b307bcfb02
4 changed files with 22 additions and 19 deletions

View File

@ -1146,11 +1146,11 @@ public:
/// ///
class DagInit : public TypedInit, public FoldingSetNode { class DagInit : public TypedInit, public FoldingSetNode {
Init *Val; Init *Val;
std::string ValName; StringInit *ValName;
std::vector<Init*> Args; std::vector<Init*> Args;
std::vector<std::string> ArgNames; std::vector<std::string> ArgNames;
DagInit(Init *V, StringRef VN, ArrayRef<Init *> ArgRange, DagInit(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange,
ArrayRef<std::string> NameRange) ArrayRef<std::string> NameRange)
: TypedInit(IK_DagInit, DagRecTy::get()), Val(V), ValName(VN), : TypedInit(IK_DagInit, DagRecTy::get()), Val(V), ValName(VN),
Args(ArgRange.begin(), ArgRange.end()), Args(ArgRange.begin(), ArgRange.end()),
@ -1164,9 +1164,9 @@ public:
return I->getKind() == IK_DagInit; return I->getKind() == IK_DagInit;
} }
static DagInit *get(Init *V, StringRef VN, ArrayRef<Init *> ArgRange, static DagInit *get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange,
ArrayRef<std::string> NameRange); ArrayRef<std::string> NameRange);
static DagInit *get(Init *V, StringRef VN, static DagInit *get(Init *V, StringInit *VN,
const std::vector<std::pair<Init*, std::string>> &args); const std::vector<std::pair<Init*, std::string>> &args);
void Profile(FoldingSetNodeID &ID) const; void Profile(FoldingSetNodeID &ID) const;
@ -1175,7 +1175,10 @@ public:
Init *getOperator() const { return Val; } Init *getOperator() const { return Val; }
StringRef getName() const { return ValName; } StringInit *getName() const { return ValName; }
StringRef getNameStr() const {
return ValName ? ValName->getValue() : StringRef();
}
unsigned getNumArgs() const { return Args.size(); } unsigned getNumArgs() const { return Args.size(); }
Init *getArg(unsigned Num) const { Init *getArg(unsigned Num) const {

View File

@ -838,7 +838,7 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const {
Args.push_back(RHSs->getArg(i)); Args.push_back(RHSs->getArg(i));
ArgNames.push_back(RHSs->getArgName(i)); ArgNames.push_back(RHSs->getArgName(i));
} }
return DagInit::get(LHSs->getOperator(), "", Args, ArgNames); return DagInit::get(LHSs->getOperator(), nullptr, Args, ArgNames);
} }
break; break;
} }
@ -1035,7 +1035,7 @@ static Init *ForeachHelper(Init *LHS, Init *MHS, Init *RHS, RecTy *Type,
args.push_back(std::make_pair(Arg, ArgName)); args.push_back(std::make_pair(Arg, ArgName));
} }
return DagInit::get(Val, "", args); return DagInit::get(Val, nullptr, args);
} }
ListInit *MHSl = dyn_cast<ListInit>(MHS); ListInit *MHSl = dyn_cast<ListInit>(MHS);
@ -1523,11 +1523,11 @@ Init *FieldInit::resolveReferences(Record &R, const RecordVal *RV) const {
return const_cast<FieldInit *>(this); return const_cast<FieldInit *>(this);
} }
static void ProfileDagInit(FoldingSetNodeID &ID, Init *V, StringRef VN, static void ProfileDagInit(FoldingSetNodeID &ID, Init *V, StringInit *VN,
ArrayRef<Init *> ArgRange, ArrayRef<Init *> ArgRange,
ArrayRef<std::string> NameRange) { ArrayRef<std::string> NameRange) {
ID.AddPointer(V); ID.AddPointer(V);
ID.AddString(VN); ID.AddPointer(VN);
ArrayRef<Init *>::iterator Arg = ArgRange.begin(); ArrayRef<Init *>::iterator Arg = ArgRange.begin();
ArrayRef<std::string>::iterator Name = NameRange.begin(); ArrayRef<std::string>::iterator Name = NameRange.begin();
@ -1540,7 +1540,7 @@ static void ProfileDagInit(FoldingSetNodeID &ID, Init *V, StringRef VN,
} }
DagInit * DagInit *
DagInit::get(Init *V, StringRef VN, ArrayRef<Init *> ArgRange, DagInit::get(Init *V, StringInit *VN, ArrayRef<Init *> ArgRange,
ArrayRef<std::string> NameRange) { ArrayRef<std::string> NameRange) {
static FoldingSet<DagInit> ThePool; static FoldingSet<DagInit> ThePool;
static std::vector<DagInit*> TheActualPool; static std::vector<DagInit*> TheActualPool;
@ -1559,7 +1559,7 @@ DagInit::get(Init *V, StringRef VN, ArrayRef<Init *> ArgRange,
} }
DagInit * DagInit *
DagInit::get(Init *V, StringRef VN, DagInit::get(Init *V, StringInit *VN,
const std::vector<std::pair<Init*, std::string> > &args) { const std::vector<std::pair<Init*, std::string> > &args) {
std::vector<Init *> Args; std::vector<Init *> Args;
std::vector<std::string> Names; std::vector<std::string> Names;
@ -1598,8 +1598,8 @@ Init *DagInit::resolveReferences(Record &R, const RecordVal *RV) const {
std::string DagInit::getAsString() const { std::string DagInit::getAsString() const {
std::string Result = "(" + Val->getAsString(); std::string Result = "(" + Val->getAsString();
if (!ValName.empty()) if (ValName)
Result += ":" + ValName; Result += ":" + ValName->getAsUnquotedString();
if (!Args.empty()) { if (!Args.empty()) {
Result += " " + Args[0]->getAsString(); Result += " " + Args[0]->getAsString();
if (!ArgNames[0].empty()) Result += ":$" + ArgNames[0]; if (!ArgNames[0].empty()) Result += ":$" + ArgNames[0];

View File

@ -1418,13 +1418,13 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
if (!Operator) return nullptr; if (!Operator) return nullptr;
// If the operator name is present, parse it. // If the operator name is present, parse it.
std::string OperatorName; StringInit *OperatorName = nullptr;
if (Lex.getCode() == tgtok::colon) { if (Lex.getCode() == tgtok::colon) {
if (Lex.Lex() != tgtok::VarName) { // eat the ':' if (Lex.Lex() != tgtok::VarName) { // eat the ':'
TokError("expected variable name in dag operator"); TokError("expected variable name in dag operator");
return nullptr; return nullptr;
} }
OperatorName = Lex.getCurStrVal(); OperatorName = StringInit::get(Lex.getCurStrVal());
Lex.Lex(); // eat the VarName. Lex.Lex(); // eat the VarName.
} }

View File

@ -2072,7 +2072,7 @@ TreePatternNode *TreePattern::ParseTreePattern(Init *TheInit, StringRef OpName){
/// (foo GPR, imm) -> (foo GPR, (imm)) /// (foo GPR, imm) -> (foo GPR, (imm))
if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag"))
return ParseTreePattern( return ParseTreePattern(
DagInit::get(DI, "", DagInit::get(DI, nullptr,
std::vector<std::pair<Init*, std::string> >()), std::vector<std::pair<Init*, std::string> >()),
OpName); OpName);
@ -2226,9 +2226,9 @@ TreePatternNode *TreePattern::ParseTreePattern(Init *TheInit, StringRef OpName){
TreePatternNode *Result = new TreePatternNode(Operator, Children, NumResults); TreePatternNode *Result = new TreePatternNode(Operator, Children, NumResults);
Result->setName(OpName); Result->setName(OpName);
if (!Dag->getName().empty()) { if (Dag->getName()) {
assert(Result->getName().empty()); assert(Result->getName().empty());
Result->setName(Dag->getName()); Result->setName(Dag->getNameStr());
} }
return Result; return Result;
} }
@ -2546,7 +2546,7 @@ void CodeGenDAGPatterns::ParseDefaultOperands() {
for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op) for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op)
Ops.push_back(std::make_pair(DefaultInfo->getArg(op), Ops.push_back(std::make_pair(DefaultInfo->getArg(op),
DefaultInfo->getArgName(op))); DefaultInfo->getArgName(op)));
DagInit *DI = DagInit::get(SomeSDNode, "", Ops); DagInit *DI = DagInit::get(SomeSDNode, nullptr, Ops);
// Create a TreePattern to parse this. // Create a TreePattern to parse this.
TreePattern P(DefaultOps[i], DI, false, *this); TreePattern P(DefaultOps[i], DI, false, *this);