aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/TableGenFundamentals.html7
-rw-r--r--test/TableGen/patsubst.td15
-rw-r--r--test/TableGen/regmatch.td11
-rw-r--r--utils/TableGen/CodeGenDAGPatterns.cpp2
-rw-r--r--utils/TableGen/Record.cpp98
-rw-r--r--utils/TableGen/Record.h4
-rw-r--r--utils/TableGen/TGLexer.cpp2
-rw-r--r--utils/TableGen/TGLexer.h2
-rw-r--r--utils/TableGen/TGParser.cpp16
9 files changed, 4 insertions, 153 deletions
diff --git a/docs/TableGenFundamentals.html b/docs/TableGenFundamentals.html
index 5d64a08952..05b2b233e6 100644
--- a/docs/TableGenFundamentals.html
+++ b/docs/TableGenFundamentals.html
@@ -417,13 +417,6 @@ aborts with an error. </dd>
<dt><tt>!subst(a, b, c)</tt></dt>
<dd>If 'a' and 'b' are of string type or are symbol references, substitute
'b' for 'a' in 'c.' This operation is analogous to $(subst) in GNU make.</dd>
-<dt><tt>!patsubst(a, b, c)</tt></dt>
- <dd>patch regular expression 'a' against string 'c' and substitute string 'b' on
-a match. 'b' may contain placeholders of the form $&lt;digit&gt;, where
-&lt;digit&gt; is a number 1-9.</dd>
-<dt><tt>!regmatch(a, b)</tt></dt>
- <dd>An integer {0,1} indicating whether string 'b' matched regular expression
-'a.'</dd>
<dt><tt>!foreach(a, b, c)</tt></dt>
<dd>For each member 'b' of dag or list 'a' apply operator 'c.' 'b' is a
dummy variable that should be declared as a member variable of an instantiated
diff --git a/test/TableGen/patsubst.td b/test/TableGen/patsubst.td
index 0a7b3d8219..e69de29bb2 100644
--- a/test/TableGen/patsubst.td
+++ b/test/TableGen/patsubst.td
@@ -1,15 +0,0 @@
-// RUN: tblgen %s | grep {Match1 = "v4f32"} | count 1
-// RUN: tblgen %s | grep {Match2 = "v2f64"} | count 1
-// RUN: tblgen %s | grep {Match3 = "v4f32 add"} | count 1
-// RUN: tblgen %s | grep {Match4 = "v2f64 add"} | count 1
-
-class Foo<string v> {
- string Value = v;
- string Match1 = !patsubst(".*ps$", "v4f32", v);
- string Match2 = !patsubst(".*pd$", "v2f64", v);
- string Match3 = !patsubst("(.*)ps$", "v4f32 $1", v);
- string Match4 = !patsubst("(.*)pd$", "v2f64 $1", v);
-}
-
-def Bar : Foo<"addps">;
-def Baz : Foo<"addpd">;
diff --git a/test/TableGen/regmatch.td b/test/TableGen/regmatch.td
index 3eb35df41c..e69de29bb2 100644
--- a/test/TableGen/regmatch.td
+++ b/test/TableGen/regmatch.td
@@ -1,11 +0,0 @@
-// RUN: tblgen %s | grep {Match1 = 1} | count 1
-// RUN: tblgen %s | grep {Match2 = 1} | count 1
-
-class Foo<string v> {
- string Value = v;
- int Match1 = !regmatch(".*ps$", v);
- int Match2 = !regmatch(".*pd$", v);
-}
-
-def Bar : Foo<"addps">;
-def Baz : Foo<"addpd">;
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp
index e668468772..05bbc0a7fd 100644
--- a/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -2025,7 +2025,7 @@ void CodeGenDAGPatterns::ParsePatterns() {
}
}
else {
- ListTy = TArg->getType();
+ ListTy - TArg->getType();
}
}
ListInit *LI = new ListInit(Values, new ListRecTy(ListTy));
diff --git a/utils/TableGen/Record.cpp b/utils/TableGen/Record.cpp
index 2f500ae5c4..c62e21b3aa 100644
--- a/utils/TableGen/Record.cpp
+++ b/utils/TableGen/Record.cpp
@@ -16,9 +16,6 @@
#include "llvm/Support/Streams.h"
#include "llvm/ADT/StringExtras.h"
#include <ios>
-#include <sys/types.h>
-#include <regex.h>
-#include <sstream>
using namespace llvm;
@@ -750,36 +747,6 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
}
break;
}
- case REGMATCH: {
- StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
- StringInit *RHSs = dynamic_cast<StringInit*>(RHS);
- if (LHSs && RHSs) {
- regex_t compiled;
- int err = regcomp (&compiled, LHSs->getValue().c_str(), REG_EXTENDED);
- if (err != 0) {
- size_t length = regerror (err, &compiled, NULL, 0);
- char *buffer = new char[length];
- (void) regerror (err, &compiled, buffer, length);
- std::string errmsg = buffer;
- delete[] buffer;
- regfree(&compiled);
- throw errmsg;
- }
- int result = regexec(&compiled, RHSs->getValue().c_str(), 0, NULL, 0);
- if (result == REG_ESPACE) {
- size_t length = regerror (err, &compiled, NULL, 0);
- char *buffer = new char[length];
- (void) regerror (err, &compiled, buffer, length);
- std::string errmsg = buffer;
- delete[] buffer;
- regfree(&compiled);
- throw errmsg;
- }
- regfree(&compiled);
- return new IntInit(result == 0);
- }
- break;
- }
case SHL:
case SRA:
case SRL: {
@@ -819,7 +786,6 @@ std::string BinOpInit::getAsString() const {
case SRA: Result = "!sra"; break;
case SRL: Result = "!srl"; break;
case STRCONCAT: Result = "!strconcat"; break;
- case REGMATCH: Result = "!regmatch"; break;
case NAMECONCAT:
Result = "!nameconcat<" + getType()->getAsString() + ">"; break;
}
@@ -1035,69 +1001,6 @@ Init *TernOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
}
break;
}
-
- case PATSUBST: {
- StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
- StringInit *MHSs = dynamic_cast<StringInit*>(MHS);
- StringInit *RHSs = dynamic_cast<StringInit*>(RHS);
-
- if (LHSs && MHSs && RHSs) {
- regex_t compiled;
- int err = regcomp (&compiled, LHSs->getValue().c_str(), REG_EXTENDED);
- if (err != 0) {
- size_t length = regerror (err, &compiled, NULL, 0);
- char *buffer = new char[length];
- (void) regerror (err, &compiled, buffer, length);
- std::string errmsg = buffer;
- delete[] buffer;
- regfree(&compiled);
- throw errmsg;
- }
- regmatch_t matches[10];
- int result = regexec(&compiled, RHSs->getValue().c_str(), 10, matches, 0);
- if (result == REG_ESPACE) {
- size_t length = regerror (err, &compiled, NULL, 0);
- char *buffer = new char[length];
- (void) regerror (err, &compiled, buffer, length);
- std::string errmsg = buffer;
- delete[] buffer;
- regfree(&compiled);
- throw errmsg;
- }
- regfree(&compiled);
- if (result == 0) {
- // Parse the substitution string looking for $1, $2, etc. and
- // substitute strings. If there are no $1, etc. just replace
- // the whole string.
- std::string replacement = MHSs->getValue();
- size_t pos = replacement.find("$");
- while (pos != std::string::npos && pos+1 < replacement.size()) {
- if (std::isdigit(replacement[pos+1])) {
- std::string sidx(&replacement[pos+1], 1);
- std::istringstream str(sidx);
- int idx;
- if (str >> idx) {
- replacement.replace(pos, 2, RHSs->getValue(), matches[idx].rm_so,
- matches[idx].rm_eo - matches[idx].rm_so);
- }
- else {
- throw "unexpected failure in patsubst index calculation";
- }
- }
- else if (replacement[pos+1] == '$') {
- replacement.replace(pos, 2, "$");
- }
- pos = replacement.find("$", pos+1);
- }
- return new StringInit(replacement);
- }
- else {
- // No match, just pass the string through
- return RHSs;
- }
- }
- break;
- }
}
return this;
@@ -1133,7 +1036,6 @@ std::string TernOpInit::getAsString() const {
std::string Result;
switch (Opc) {
case SUBST: Result = "!subst"; break;
- case PATSUBST: Result = "!patsubst"; break;
case FOREACH: Result = "!foreach"; break;
case IF: Result = "!if"; break;
}
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h
index d8e4fb34b6..ac06cae809 100644
--- a/utils/TableGen/Record.h
+++ b/utils/TableGen/Record.h
@@ -841,7 +841,7 @@ public:
///
class BinOpInit : public OpInit {
public:
- enum BinaryOp { SHL, SRA, SRL, STRCONCAT, CONCAT, NAMECONCAT, REGMATCH };
+ enum BinaryOp { SHL, SRA, SRL, STRCONCAT, CONCAT, NAMECONCAT };
private:
BinaryOp Opc;
Init *LHS, *RHS;
@@ -885,7 +885,7 @@ public:
///
class TernOpInit : public OpInit {
public:
- enum TernaryOp { SUBST, FOREACH, IF, PATSUBST };
+ enum TernaryOp { SUBST, FOREACH, IF };
private:
TernaryOp Opc;
Init *LHS, *MHS, *RHS;
diff --git a/utils/TableGen/TGLexer.cpp b/utils/TableGen/TGLexer.cpp
index 930d9dba5b..758d499a8b 100644
--- a/utils/TableGen/TGLexer.cpp
+++ b/utils/TableGen/TGLexer.cpp
@@ -447,9 +447,7 @@ tgtok::TokKind TGLexer::LexExclaim() {
if (Len == 3 && !memcmp(Start, "shl", 3)) return tgtok::XSHL;
if (Len == 9 && !memcmp(Start, "strconcat", 9)) return tgtok::XStrConcat;
if (Len == 10 && !memcmp(Start, "nameconcat", 10)) return tgtok::XNameConcat;
- if (Len == 8 && !memcmp(Start, "regmatch", 8)) return tgtok::XRegMatch;
if (Len == 5 && !memcmp(Start, "subst", 5)) return tgtok::XSubst;
- if (Len == 8 && !memcmp(Start, "patsubst", 8)) return tgtok::XPatSubst;
if (Len == 7 && !memcmp(Start, "foreach", 7)) return tgtok::XForEach;
if (Len == 4 && !memcmp(Start, "cast", 4)) return tgtok::XCast;
if (Len == 3 && !memcmp(Start, "car", 3)) return tgtok::XCar;
diff --git a/utils/TableGen/TGLexer.h b/utils/TableGen/TGLexer.h
index fef10f0c45..ac3b984003 100644
--- a/utils/TableGen/TGLexer.h
+++ b/utils/TableGen/TGLexer.h
@@ -46,7 +46,7 @@ namespace tgtok {
// !keywords.
XConcat, XSRA, XSRL, XSHL, XStrConcat, XNameConcat, XCast, XSubst,
- XForEach, XCar, XCdr, XNull, XIf, XRegMatch, XPatSubst,
+ XForEach, XCar, XCdr, XNull, XIf,
// Integer value.
IntVal,
diff --git a/utils/TableGen/TGParser.cpp b/utils/TableGen/TGParser.cpp
index d2bc6b853d..cdd285703b 100644
--- a/utils/TableGen/TGParser.cpp
+++ b/utils/TableGen/TGParser.cpp
@@ -799,7 +799,6 @@ Init *TGParser::ParseOperation(Record *CurRec) {
case tgtok::XSRL:
case tgtok::XSHL:
case tgtok::XStrConcat:
- case tgtok::XRegMatch:
case tgtok::XNameConcat: { // Value ::= !binop '(' Value ',' Value ')'
BinOpInit::BinaryOp Code;
RecTy *Type = 0;
@@ -832,11 +831,6 @@ Init *TGParser::ParseOperation(Record *CurRec) {
Code = BinOpInit::STRCONCAT;
Type = new StringRecTy();
break;
- case tgtok::XRegMatch:
- Lex.Lex(); // eat the operation
- Code = BinOpInit::REGMATCH;
- Type = new IntRecTy();
- break;
case tgtok::XNameConcat:
Lex.Lex(); // eat the operation
Code = BinOpInit::NAMECONCAT;
@@ -878,7 +872,6 @@ Init *TGParser::ParseOperation(Record *CurRec) {
case tgtok::XIf:
case tgtok::XForEach:
- case tgtok::XPatSubst:
case tgtok::XSubst: { // Value ::= !ternop '(' Value ',' Value ',' Value ')'
TernOpInit::TernaryOp Code;
RecTy *Type = 0;
@@ -897,9 +890,6 @@ Init *TGParser::ParseOperation(Record *CurRec) {
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");
@@ -973,10 +963,6 @@ Init *TGParser::ParseOperation(Record *CurRec) {
Type = RHSt->getType();
break;
}
- case tgtok::XPatSubst: {
- Type = new StringRecTy;
- break;
- }
}
return (new TernOpInit(Code, LHS, MHS, RHS, Type))->Fold(CurRec, CurMultiClass);
}
@@ -1281,11 +1267,9 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType) {
case tgtok::XSRL:
case tgtok::XSHL:
case tgtok::XStrConcat:
- case tgtok::XRegMatch:
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;