diff options
author | Robert Bocchino <bocchino@illinois.edu> | 2006-01-10 19:04:32 +0000 |
---|---|---|
committer | Robert Bocchino <bocchino@illinois.edu> | 2006-01-10 19:04:32 +0000 |
commit | aa1cf5440e5e9f166be3720d26b84081ee134f36 (patch) | |
tree | 89a59abec5efa905bb68b6dcb835fe78f9152f80 /llvm/lib/AsmParser/llvmAsmParser.y | |
parent | 4dc697098ea9698f1469bbd5107734106a1d92ad (diff) | |
download | bcm5719-llvm-aa1cf5440e5e9f166be3720d26b84081ee134f36.tar.gz bcm5719-llvm-aa1cf5440e5e9f166be3720d26b84081ee134f36.zip |
Added lexer and parser support for the extractelement operation.
llvm-svn: 25177
Diffstat (limited to 'llvm/lib/AsmParser/llvmAsmParser.y')
-rw-r--r-- | llvm/lib/AsmParser/llvmAsmParser.y | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/AsmParser/llvmAsmParser.y b/llvm/lib/AsmParser/llvmAsmParser.y index b5a3dcd46cd..2b04412bd5f 100644 --- a/llvm/lib/AsmParser/llvmAsmParser.y +++ b/llvm/lib/AsmParser/llvmAsmParser.y @@ -979,7 +979,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) { // Other Operators %type <OtherOpVal> ShiftOps -%token <OtherOpVal> PHI_TOK CAST SELECT SHL SHR VAARG +%token <OtherOpVal> PHI_TOK CAST SELECT SHL SHR VAARG EXTRACTELEMENT %token VAARG_old VANEXT_old //OBSOLETE @@ -1519,9 +1519,16 @@ ConstExpr: CAST '(' ConstVal TO Types ')' { if (!$3->getType()->isInteger()) ThrowException("Shift constant expression requires integer operand!"); $$ = ConstantExpr::get($1, $3, $5); + } + | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' { + if (!isa<PackedType>($3->getType())) + ThrowException("First operand of extractelement must be " + "packed type!"); + if ($5->getType() != Type::UIntTy) + ThrowException("Second operand of extractelement must be uint!"); + $$ = ConstantExpr::getExtractElement($3, $5); }; - // ConstVector - A list of comma separated constants. ConstVector : ConstVector ',' ConstVal { ($$ = $1)->push_back($3); @@ -2181,6 +2188,14 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { $$ = new LoadInst(foo); delete $4; } + | EXTRACTELEMENT ResolvedVal ',' ResolvedVal { + if (!isa<PackedType>($2->getType())) + ThrowException("First operand of extractelement must be a " + "packed type val!"); + if ($4->getType() != Type::UIntTy) + ThrowException("Second operand of extractelement must be a uint!"); + $$ = new ExtractElementInst($2, $4); + } | PHI_TOK PHIList { const Type *Ty = $2->front().first->getType(); if (!Ty->isFirstClassType()) |