mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
TableGen: Move GenStrConcat to a helper function in BinOpInit
Summary: Make it accessible for more users. Change-Id: Ib05f09ba14e7942ced5d2f24b205efa285e40cd5 Reviewers: arsenm, craig.topper, tra, MartinO Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D44196 llvm-svn: 327845
This commit is contained in:
parent
ddd47aadb0
commit
a79d70d75f
@ -821,6 +821,7 @@ public:
|
||||
|
||||
static BinOpInit *get(BinaryOp opc, Init *lhs, Init *rhs,
|
||||
RecTy *Type);
|
||||
static Init *getStrConcat(Init *lhs, Init *rhs);
|
||||
|
||||
void Profile(FoldingSetNodeID &ID) const;
|
||||
|
||||
|
@ -816,6 +816,14 @@ static StringInit *ConcatStringInits(const StringInit *I0,
|
||||
return StringInit::get(Concat);
|
||||
}
|
||||
|
||||
Init *BinOpInit::getStrConcat(Init *I0, Init *I1) {
|
||||
// Shortcut for the common case of concatenating two strings.
|
||||
if (const StringInit *I0s = dyn_cast<StringInit>(I0))
|
||||
if (const StringInit *I1s = dyn_cast<StringInit>(I1))
|
||||
return ConcatStringInits(I0s, I1s);
|
||||
return BinOpInit::get(BinOpInit::STRCONCAT, I0, I1, StringRecTy::get());
|
||||
}
|
||||
|
||||
Init *BinOpInit::Fold(Record *CurRec) const {
|
||||
switch (getOpcode()) {
|
||||
case CONCAT: {
|
||||
@ -2148,22 +2156,15 @@ RecordKeeper::getAllDerivedDefinitions(StringRef ClassName) const {
|
||||
return Defs;
|
||||
}
|
||||
|
||||
static Init *GetStrConcat(Init *I0, Init *I1) {
|
||||
// Shortcut for the common case of concatenating two strings.
|
||||
if (const StringInit *I0s = dyn_cast<StringInit>(I0))
|
||||
if (const StringInit *I1s = dyn_cast<StringInit>(I1))
|
||||
return ConcatStringInits(I0s, I1s);
|
||||
return BinOpInit::get(BinOpInit::STRCONCAT, I0, I1, StringRecTy::get());
|
||||
}
|
||||
|
||||
Init *llvm::QualifyName(Record &CurRec, MultiClass *CurMultiClass,
|
||||
Init *Name, StringRef Scoper) {
|
||||
Init *NewName = GetStrConcat(CurRec.getNameInit(), StringInit::get(Scoper));
|
||||
NewName = GetStrConcat(NewName, Name);
|
||||
Init *NewName =
|
||||
BinOpInit::getStrConcat(CurRec.getNameInit(), StringInit::get(Scoper));
|
||||
NewName = BinOpInit::getStrConcat(NewName, Name);
|
||||
if (CurMultiClass && Scoper != "::") {
|
||||
Init *Prefix = GetStrConcat(CurMultiClass->Rec.getNameInit(),
|
||||
StringInit::get("::"));
|
||||
NewName = GetStrConcat(Prefix, NewName);
|
||||
Init *Prefix = BinOpInit::getStrConcat(CurMultiClass->Rec.getNameInit(),
|
||||
StringInit::get("::"));
|
||||
NewName = BinOpInit::getStrConcat(Prefix, NewName);
|
||||
}
|
||||
|
||||
if (BinOpInit *BinOp = dyn_cast<BinOpInit>(NewName))
|
||||
|
@ -1994,9 +1994,7 @@ Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
|
||||
break;
|
||||
}
|
||||
|
||||
Result =
|
||||
BinOpInit::get(BinOpInit::STRCONCAT, LHS, RHS, StringRecTy::get())
|
||||
->Fold(CurRec);
|
||||
Result = BinOpInit::getStrConcat(LHS, RHS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2831,12 +2829,10 @@ Record *TGParser::InstantiateMulticlassDef(MultiClass &MC, Record *DefProto,
|
||||
if (DefNameString) {
|
||||
// We have a fully expanded string so there are no operators to
|
||||
// resolve. We should concatenate the given prefix and name.
|
||||
DefName = BinOpInit::get(
|
||||
BinOpInit::STRCONCAT,
|
||||
UnOpInit::get(UnOpInit::CAST, DefmPrefix, StringRecTy::get())
|
||||
->Fold(DefProto),
|
||||
DefName, StringRecTy::get())
|
||||
->Fold(DefProto);
|
||||
DefName = BinOpInit::getStrConcat(
|
||||
UnOpInit::get(UnOpInit::CAST, DefmPrefix, StringRecTy::get())
|
||||
->Fold(DefProto),
|
||||
DefName);
|
||||
}
|
||||
|
||||
// Make a trail of SMLocs from the multiclass instantiations.
|
||||
|
Loading…
x
Reference in New Issue
Block a user