diff options
author | Chris Lattner <sabre@nondot.org> | 2003-08-04 20:44:43 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-08-04 20:44:43 +0000 |
commit | bc21c34ea159dc40dfd5b001c189a725cd245f02 (patch) | |
tree | c9295caa40e357f70bfa50e9add78d92fac8b1fa /support/tools/TableGen | |
parent | 8e9a9774eb12b5242f74b8ac5b20e0a938ec9c53 (diff) | |
download | external_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.y | 24 |
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); |