Commit 5cfd5d9b by Andrew Pinski Committed by Andrew Pinski

c-typeck.c (build_binary_op): Allow % on integal vectors.

2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * c-typeck.c (build_binary_op): Allow % on integal vectors.
        * doc/extend.texi (Vector Extension): Document that % is allowed too.

009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * typeck.c (build_binary_op): Allow % on integal vectors.

2009-05-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        * gcc.dg/vector-4.c: New testcase.
        * gcc.dg/simd-1b.c: % is now allowed for integer vectors.
        * g++.dg/ext/vector16.C: New testcase.

From-SVN: r147722
parent dae279f0
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* c-typeck.c (build_binary_op): Allow % on integal vectors.
* doc/extend.texi (Vector Extension): Document that % is allowed too.
2009-05-19 H.J. Lu <hongjiu.lu@intel.com> 2009-05-19 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_avoid_jump_mispredicts): Check * config/i386/i386.c (ix86_avoid_jump_mispredicts): Check
......
...@@ -8988,7 +8988,11 @@ build_binary_op (location_t location, enum tree_code code, ...@@ -8988,7 +8988,11 @@ build_binary_op (location_t location, enum tree_code code,
case FLOOR_MOD_EXPR: case FLOOR_MOD_EXPR:
warn_for_div_by_zero (location, op1); warn_for_div_by_zero (location, op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
&& TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
common = 1;
else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{ {
/* Although it would be tempting to shorten always here, that loses /* Although it would be tempting to shorten always here, that loses
on some targets, since the modulo instruction is undefined if the on some targets, since the modulo instruction is undefined if the
......
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* typeck.c (build_binary_op): Allow % on integal vectors.
2009-05-18 Jason Merrill <jason@redhat.com> 2009-05-18 Jason Merrill <jason@redhat.com>
Implement explicit conversions ops as specified in N2437. Implement explicit conversions ops as specified in N2437.
......
...@@ -3492,7 +3492,11 @@ cp_build_binary_op (location_t location, ...@@ -3492,7 +3492,11 @@ cp_build_binary_op (location_t location,
case FLOOR_MOD_EXPR: case FLOOR_MOD_EXPR:
warn_for_div_by_zero (location, op1); warn_for_div_by_zero (location, op1);
if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
&& TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
&& TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
common = 1;
else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
{ {
/* Although it would be tempting to shorten always here, that loses /* Although it would be tempting to shorten always here, that loses
on some targets, since the modulo instruction is undefined if the on some targets, since the modulo instruction is undefined if the
......
...@@ -5746,7 +5746,7 @@ produce code that uses 4 @code{SIs}. ...@@ -5746,7 +5746,7 @@ produce code that uses 4 @code{SIs}.
The types defined in this manner can be used with a subset of normal C The types defined in this manner can be used with a subset of normal C
operations. Currently, GCC will allow using the following operators operations. Currently, GCC will allow using the following operators
on these types: @code{+, -, *, /, unary minus, ^, |, &, ~}@. on these types: @code{+, -, *, /, unary minus, ^, |, &, ~, %}@.
The operations behave like C++ @code{valarrays}. Addition is defined as The operations behave like C++ @code{valarrays}. Addition is defined as
the addition of the corresponding elements of the operands. For the addition of the corresponding elements of the operands. For
......
2009-05-19 Andrew Pinski <andrew_pinski@playstation.sony.com>
* gcc.dg/vector-4.c: New testcase.
* gcc.dg/simd-1b.c: % is now allowed for integer vectors.
* g++.dg/ext/vector16.C: New testcase.
2009-05-19 H.J. Lu <hongjiu.lu@intel.com> 2009-05-19 H.J. Lu <hongjiu.lu@intel.com>
PR c/40172 PR c/40172
......
/* { dg-do compile } */
#define vector __attribute__((vector_size(4*sizeof(int)) ))
vector int a, b, c;
/* Test that remainder works for vectors. */
void f(void)
{
a = b % c;
}
...@@ -14,7 +14,7 @@ void ...@@ -14,7 +14,7 @@ void
hanneke () hanneke ()
{ {
/* Operators on compatible SIMD types. */ /* Operators on compatible SIMD types. */
a %= b; /* { dg-error "invalid operands to binary %" } */ a %= b;
c &= d; c &= d;
a |= b; a |= b;
c ^= d; c ^= d;
......
/* { dg-do compile } */
#define vector __attribute__((vector_size(4*sizeof(int)) ))
vector int a, b, c;
/* Test that remainder works for vectors. */
void f(void)
{
a = b % c;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment