Add a !patsubst operator.  Use on string types.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73099 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/TGParser.cpp b/utils/TableGen/TGParser.cpp
index 7d3d1b3..d2bc6b8 100644
--- a/utils/TableGen/TGParser.cpp
+++ b/utils/TableGen/TGParser.cpp
@@ -878,6 +878,7 @@
 
   case tgtok::XIf:
   case tgtok::XForEach:
+  case tgtok::XPatSubst:
   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
     TernOpInit::TernaryOp Code;
     RecTy *Type = 0;
@@ -896,6 +897,9 @@
     case tgtok::XSubst:
       Code = TernOpInit::SUBST;
       break;
+    case tgtok::XPatSubst:
+      Code = TernOpInit::PATSUBST;
+      break;
     }
     if (Lex.getCode() != tgtok::l_paren) {
       TokError("expected '(' after ternary operator");
@@ -969,6 +973,10 @@
       Type = RHSt->getType();
       break;
     }
+    case tgtok::XPatSubst: {
+      Type = new StringRecTy;
+      break;
+    }      
     }
     return (new TernOpInit(Code, LHS, MHS, RHS, Type))->Fold(CurRec, CurMultiClass);
   }
@@ -1277,6 +1285,7 @@
   case tgtok::XNameConcat:  // Value ::= !binop '(' Value ',' Value ')'
   case tgtok::XIf:
   case tgtok::XForEach:
+  case tgtok::XPatSubst:
   case tgtok::XSubst: {  // Value ::= !ternop '(' Value ',' Value ',' Value ')'
     return ParseOperation(CurRec);
     break;