diff options
author | Chris Lattner <sabre@nondot.org> | 2004-03-12 05:51:36 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-03-12 05:51:36 +0000 |
commit | 76f0ff394de5656b9e6e6a4016a2a5f3fbece7ad (patch) | |
tree | 18fc5327cb0a711b73fc7f0d400caab1ddcd432e /lib/AsmParser | |
parent | 57b25973d68ac8b26e0d2ad44769d77dd3e8efc5 (diff) | |
download | external_llvm-76f0ff394de5656b9e6e6a4016a2a5f3fbece7ad.zip external_llvm-76f0ff394de5656b9e6e6a4016a2a5f3fbece7ad.tar.gz external_llvm-76f0ff394de5656b9e6e6a4016a2a5f3fbece7ad.tar.bz2 |
Allow parsing select instruction and constant expr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12313 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser')
-rw-r--r-- | lib/AsmParser/Lexer.l | 1 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 16 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l index 999a576..c2db5a2 100644 --- a/lib/AsmParser/Lexer.l +++ b/lib/AsmParser/Lexer.l @@ -234,6 +234,7 @@ setge { RET_TOK(BinaryOpVal, SetGE, SETGE); } phi { RET_TOK(OtherOpVal, PHI, PHI_TOK); } call { RET_TOK(OtherOpVal, Call, CALL); } cast { RET_TOK(OtherOpVal, Cast, CAST); } +select { RET_TOK(OtherOpVal, Select, SELECT); } shl { RET_TOK(OtherOpVal, Shl, SHL); } shr { RET_TOK(OtherOpVal, Shr, SHR); } va_arg { return VA_ARG; /* FIXME: OBSOLETE */} diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 9c68cfc..2868fdd 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -876,7 +876,7 @@ using namespace llvm; // Other Operators %type <OtherOpVal> ShiftOps -%token <OtherOpVal> PHI_TOK CALL CAST SHL SHR VAARG VANEXT +%token <OtherOpVal> PHI_TOK CALL CAST SELECT SHL SHR VAARG VANEXT %token VA_ARG // FIXME: OBSOLETE %start Module @@ -1251,6 +1251,13 @@ ConstExpr: CAST '(' ConstVal TO Types ')' { $$ = ConstantExpr::getGetElementPtr($3, IdxVec); } + | SELECT '(' ConstVal ',' ConstVal ',' ConstVal ')' { + if ($3->getType() != Type::BoolTy) + ThrowException("Select condition must be of boolean type!"); + if ($5->getType() != $7->getType()) + ThrowException("Select operand types must match!"); + $$ = ConstantExpr::getSelect($3, $5, $7); + } | BinaryOps '(' ConstVal ',' ConstVal ')' { if ($3->getType() != $5->getType()) ThrowException("Binary operator types must match!"); @@ -1802,6 +1809,13 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { $$ = new CastInst($2, *$4); delete $4; } + | SELECT ResolvedVal ',' ResolvedVal ',' ResolvedVal { + if ($2->getType() != Type::BoolTy) + ThrowException("select condition must be boolean!"); + if ($4->getType() != $6->getType()) + ThrowException("select value types should match!"); + $$ = new SelectInst($2, $4, $6); + } | VA_ARG ResolvedVal ',' Types { // FIXME: This is emulation code for an obsolete syntax. This should be // removed at some point. |