diff options
author | Chris Lattner <sabre@nondot.org> | 2005-12-21 18:31:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-12-21 18:31:29 +0000 |
commit | 0a01783d7cef1e9b646076013777919f149afcf7 (patch) | |
tree | 14368ac25b50f05a183824555de7fde1e4133d0b /lib | |
parent | b9d4100f327647debd0936fe403cdef00ab56859 (diff) |
allow logical operators on packed integral types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24907 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index dfaeb83015..b5a3dcd46c 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -1501,8 +1501,11 @@ ConstExpr: CAST '(' ConstVal TO Types ')' { | LogicalOps '(' ConstVal ',' ConstVal ')' { if ($3->getType() != $5->getType()) ThrowException("Logical operator types must match!"); - if (!$3->getType()->isIntegral()) - ThrowException("Logical operands must have integral types!"); + if (!$3->getType()->isIntegral()) { + if (!isa<PackedType>($3->getType()) || + !cast<PackedType>($3->getType())->getElementType()->isIntegral()) + ThrowException("Logical operator requires integral operands!"); + } $$ = ConstantExpr::get($1, $3, $5); } | SetCondOps '(' ConstVal ',' ConstVal ')' { @@ -2079,8 +2082,11 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { delete $2; } | LogicalOps Types ValueRef ',' ValueRef { - if (!(*$2)->isIntegral()) - ThrowException("Logical operator requires integral operands!"); + if (!(*$2)->isIntegral()) { + if (!isa<PackedType>($2->get()) || + !cast<PackedType>($2->get())->getElementType()->isIntegral()) + ThrowException("Logical operator requires integral operands!"); + } $$ = BinaryOperator::create($1, getVal(*$2, $3), getVal(*$2, $5)); if ($$ == 0) ThrowException("binary operator returned null!"); |