diff options
author | Ilya Enkovich <enkovich.gnu@gmail.com> | 2016-03-17 10:58:26 +0000 |
---|---|---|
committer | Ilya Enkovich <ienkovich@gcc.gnu.org> | 2016-03-17 10:58:26 +0000 |
commit | 0c8b64cb587dbe83a0660878c69d7ff96589673c (patch) | |
tree | df813d10b32fa201cc0b67533f0f01f5bee67085 /gcc | |
parent | a7ceba7d02ca7eb946aa99b6f97195cc5a4e5123 (diff) | |
download | gcc-0c8b64cb587dbe83a0660878c69d7ff96589673c.zip gcc-0c8b64cb587dbe83a0660878c69d7ff96589673c.tar.gz gcc-0c8b64cb587dbe83a0660878c69d7ff96589673c.tar.bz2 |
match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Apply for boolean vector with vector mode only.
gcc/
* match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Apply
for boolean vector with vector mode only.
(A - (B vcmp C ? 1 : 0) -> A + (B vcmp C)): Likewise.
gcc/testsuite/
* gcc.target/i386/pr70251.c: New test.
From-SVN: r234283
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/match.pd | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr70251.c | 52 |
4 files changed, 64 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5e8e3fb..78f4697 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-17 Ilya Enkovich <enkovich.gnu@gmail.com> + + * match.pd (A + (B vcmp C ? 1 : 0) -> A - (B vcmp C)): Apply + for boolean vector with vector mode only. + (A - (B vcmp C ? 1 : 0) -> A + (B vcmp C)): Likewise. + 2016-03-17 Nick Clifton <nickc@redhat.com> PR target/70162 diff --git a/gcc/match.pd b/gcc/match.pd index 112deb3..7245ff4 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1759,6 +1759,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (plus:c @3 (view_convert? (vec_cond @0 integer_each_onep@1 integer_zerop@2))) (if (VECTOR_TYPE_P (type) + && VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (@0))) && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0)) && (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (TREE_TYPE (TREE_TYPE (@0))))) @@ -1768,6 +1769,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (minus @3 (view_convert? (vec_cond @0 integer_each_onep@1 integer_zerop@2))) (if (VECTOR_TYPE_P (type) + && VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (@0))) && TYPE_VECTOR_SUBPARTS (type) == TYPE_VECTOR_SUBPARTS (TREE_TYPE (@0)) && (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (TREE_TYPE (TREE_TYPE (@0))))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e27a4e1..d305b0f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-03-17 Ilya Enkovich <enkovich.gnu@gmail.com> + + * gcc.target/i386/pr70251.c: New test. + 2016-03-17 Marek Polacek <polacek@redhat.com> PR c++/70194 diff --git a/gcc/testsuite/gcc.target/i386/pr70251.c b/gcc/testsuite/gcc.target/i386/pr70251.c new file mode 100644 index 0000000..97078cd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr70251.c @@ -0,0 +1,52 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -mavx512bw" } */ +/* { dg-require-effective-target avx512bw } */ + +#define AVX512BW +#include "avx512f-helper.h" + +unsigned long long int +hash(unsigned long long int seed, unsigned long long int v) +{ + return seed ^ (v + 0x9e3779b9 + (seed<<6) + (seed>>2)); +} + +unsigned int a [100]; +signed char b [100]; +signed char c [100]; + +void +init () +{ + for (int i = 0; i < 100; ++i) + { + a [i] = 1000L; + b [i] = 10; + c [i] = 5; + } +} + +void +foo () +{ + for (int i = 0; i < 100; ++i) + b [i] = (!b [i] ^ (a [i] >= b [i])) + c [i]; +} + +unsigned long long int +checksum () +{ + unsigned long long int seed = 0ULL; + for (int i = 0; i < 100; ++i) + seed = hash (seed, b[i]); + return seed; +} + +void +TEST () +{ + init (); + foo (); + if (checksum () != 5785906989299578598ULL) + __builtin_abort (); +} |