aboutsummaryrefslogtreecommitdiffstats
path: root/support/tools/TableGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-08-04 20:44:43 +0000
committerChris Lattner <sabre@nondot.org>2003-08-04 20:44:43 +0000
commitbc21c34ea159dc40dfd5b001c189a725cd245f02 (patch)
treec9295caa40e357f70bfa50e9add78d92fac8b1fa /support/tools/TableGen
parent8e9a9774eb12b5242f74b8ac5b20e0a938ec9c53 (diff)
downloadexternal_llvm-bc21c34ea159dc40dfd5b001c189a725cd245f02.zip
external_llvm-bc21c34ea159dc40dfd5b001c189a725cd245f02.tar.gz
external_llvm-bc21c34ea159dc40dfd5b001c189a725cd245f02.tar.bz2
Parse DAG patterns
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7577 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'support/tools/TableGen')
-rw-r--r--support/tools/TableGen/FileParser.y24
1 files changed, 24 insertions, 0 deletions
diff --git a/support/tools/TableGen/FileParser.y b/support/tools/TableGen/FileParser.y
index 95dfb42..0ab3e5b 100644
--- a/support/tools/TableGen/FileParser.y
+++ b/support/tools/TableGen/FileParser.y
@@ -161,6 +161,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
int IntVal;
RecTy *Ty;
Init *Initializer;
+ std::vector<Init*> *DagValueList;
std::vector<Init*> *FieldList;
std::vector<unsigned>*BitList;
Record *Rec;
@@ -179,6 +180,7 @@ static void addSubClass(Record *SC, const std::vector<Init*> &TemplateArgs) {
%type <SubClassList> ClassList ClassListNE
%type <IntVal> OptPrefix
%type <Initializer> Value OptValue
+%type <DagValueList> DagArgList DagArgListNE
%type <FieldList> ValueList ValueListNE
%type <BitList> BitList OptBitList RBitList
%type <StrVal> Declaration OptID
@@ -270,8 +272,30 @@ Value : INTVAL {
}
$$ = new FieldInit($1, *$3);
delete $3;
+ } | '(' ID DagArgList ')' {
+ Record *D = Records.getDef(*$2);
+ if (D == 0) {
+ err() << "Invalid def '" << *$2 << "'!\n";
+ abort();
+ }
+ $$ = new DagInit(D, *$3);
+ delete $2; delete $3;
};
+DagArgListNE : Value {
+ $$ = new std::vector<Init*>();
+ $$->push_back($1);
+ }
+ | DagArgListNE ',' Value {
+ $1->push_back($3);
+ };
+
+DagArgList : /*empty*/ {
+ $$ = new std::vector<Init*>();
+ }
+ | DagArgListNE { $$ = $1; };
+
+
RBitList : INTVAL {
$$ = new std::vector<unsigned>();
$$->push_back($1);