TableGen: Move GenStrConcat to a helper function in BinOpInit
authorNicolai Haehnle <nhaehnle@gmail.com>
Mon, 19 Mar 2018 14:13:54 +0000 (14:13 +0000)
committerNicolai Haehnle <nhaehnle@gmail.com>
Mon, 19 Mar 2018 14:13:54 +0000 (14:13 +0000)
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

llvm/include/llvm/TableGen/Record.h
llvm/lib/TableGen/Record.cpp
llvm/lib/TableGen/TGParser.cpp

index 09f502d..00a6b69 100644 (file)
@@ -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;
 
index 3bc398f..e76f2a0 100644 (file)
@@ -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))
index 4a4a510..5f19d55 100644 (file)
@@ -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.