summaryrefslogtreecommitdiffstats
path: root/llvm/lib/AsmParser/llvmAsmParser.y
diff options
context:
space:
mode:
authorRobert Bocchino <bocchino@illinois.edu>2006-01-10 19:04:32 +0000
committerRobert Bocchino <bocchino@illinois.edu>2006-01-10 19:04:32 +0000
commitaa1cf5440e5e9f166be3720d26b84081ee134f36 (patch)
tree89a59abec5efa905bb68b6dcb835fe78f9152f80 /llvm/lib/AsmParser/llvmAsmParser.y
parent4dc697098ea9698f1469bbd5107734106a1d92ad (diff)
downloadbcm5719-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.y19
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())
OpenPOWER on IntegriCloud