summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/FileParser.y
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen/FileParser.y')
-rw-r--r--llvm/utils/TableGen/FileParser.y19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/FileParser.y b/llvm/utils/TableGen/FileParser.y
index 8781049956b..e7d50322ef4 100644
--- a/llvm/utils/TableGen/FileParser.y
+++ b/llvm/utils/TableGen/FileParser.y
@@ -189,6 +189,7 @@ using namespace llvm;
};
%token INT BIT STRING BITS LIST CODE DAG CLASS DEF FIELD LET IN
+%token SHLTOK SRATOK SRLTOK
%token <IntVal> INTVAL
%token <StrVal> ID VARNAME STRVAL CODEFRAGMENT
@@ -308,6 +309,24 @@ Value : INTVAL {
exit(1);
}
delete $3;
+ } | SHLTOK '(' Value ',' Value ')' {
+ $$ = $3->getBinaryOp(Init::SHL, $5);
+ if ($$ == 0) {
+ err() << "Cannot shift values '" << *$3 << "' and '" << *$5 << "'!\n";
+ exit(1);
+ }
+ } | SRATOK '(' Value ',' Value ')' {
+ $$ = $3->getBinaryOp(Init::SRA, $5);
+ if ($$ == 0) {
+ err() << "Cannot shift values '" << *$3 << "' and '" << *$5 << "'!\n";
+ exit(1);
+ }
+ } | SRLTOK '(' Value ',' Value ')' {
+ $$ = $3->getBinaryOp(Init::SRL, $5);
+ if ($$ == 0) {
+ err() << "Cannot shift values '" << *$3 << "' and '" << *$5 << "'!\n";
+ exit(1);
+ }
};
OptVarName : /* empty */ {
OpenPOWER on IntegriCloud