From 76f0ff394de5656b9e6e6a4016a2a5f3fbece7ad Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 12 Mar 2004 05:51:36 +0000 Subject: [PATCH] Allow parsing select instruction and constant expr git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12313 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/Lexer.l | 1 + lib/AsmParser/llvmAsmParser.y | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l index 999a5762998..c2db5a26348 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 9c68cfca5d2..2868fdd1b34 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -876,7 +876,7 @@ using namespace llvm; // Other Operators %type ShiftOps -%token PHI_TOK CALL CAST SHL SHR VAARG VANEXT +%token 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.