diff options
author | Martin Liska <mliska@suse.cz> | 2020-07-27 13:55:38 +0200 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2020-07-27 15:04:24 +0200 |
commit | 55c9695cbe91c406805ac0cd342949f32f13b779 (patch) | |
tree | 400c5b7ea838ff951c9bdb35a541456c4f2c0a82 /gcc | |
parent | c4c22e830251e1961c6ebec78d28d039eb2e6017 (diff) | |
download | gcc-55c9695cbe91c406805ac0cd342949f32f13b779.zip gcc-55c9695cbe91c406805ac0cd342949f32f13b779.tar.gz gcc-55c9695cbe91c406805ac0cd342949f32f13b779.tar.bz2 |
Do not expand vector comparison with VEC_COND_EXPR.
gcc/ChangeLog:
PR tree-optimization/96128
* tree-vect-generic.c (expand_vector_comparison): Do not expand
vector comparison with VEC_COND_EXPR.
gcc/testsuite/ChangeLog:
PR tree-optimization/96128
* gcc.target/s390/vector/pr96128.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.target/s390/vector/pr96128.c | 35 | ||||
-rw-r--r-- | gcc/tree-vect-generic.c | 3 |
2 files changed, 36 insertions, 2 deletions
diff --git a/gcc/testsuite/gcc.target/s390/vector/pr96128.c b/gcc/testsuite/gcc.target/s390/vector/pr96128.c new file mode 100644 index 0000000..20abe5e --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/vector/pr96128.c @@ -0,0 +1,35 @@ +/* PR tree-optimization/96128 */ +/* { dg-options "-march=z13" } */ + +#define B_TEST(TYPE) { TYPE v __attribute__((vector_size(16))); (void)((v < v) < v); } +#ifdef __cplusplus +#define T_TEST(TYPE) { TYPE s; TYPE v __attribute__((vector_size(16))); __typeof((v<v)[0]) iv __attribute__((vector_size(16))); (void)((iv ? s : s) < v); } +#else +#define T_TEST(TYPE) +#endif +#define T(TYPE) B_TEST(TYPE) T_TEST(TYPE) +#ifdef __SIZEOF_INT128__ +#define SIZEOF_MAXINT __SIZEOF_INT128__ +#else +#define SIZEOF_MAXINT __SIZEOF_LONG_LONG__ +#endif + +void f () +{ + T(short) + T(int) + T(long) + T(long long) + + T_TEST(float) + T_TEST(double) + /* Avoid trouble with non-power-of-two sizes. + Also avoid trouble with long double larger than integral types. */ +#if !defined(__i386__) && !defined(__x86_64__) && !defined(__m68k__) \ + && !defined(__ia64__) && !defined(__hppa__) \ + && (__SIZEOF_LONG_DOUBLE__ & (__SIZEOF_LONG_DOUBLE__ - 1)) == 0 \ + && __SIZEOF_LONG_DOUBLE__ <= 16 \ + && __SIZEOF_LONG_DOUBLE__ <= SIZEOF_MAXINT + T_TEST(long double) +#endif +} diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c index f8bd26f..fe6477c 100644 --- a/gcc/tree-vect-generic.c +++ b/gcc/tree-vect-generic.c @@ -419,8 +419,7 @@ expand_vector_comparison (gimple_stmt_iterator *gsi, tree type, tree op0, return NULL_TREE; tree t; - if (!expand_vec_cmp_expr_p (TREE_TYPE (op0), type, code) - && !expand_vec_cond_expr_p (type, TREE_TYPE (op0), code)) + if (!expand_vec_cmp_expr_p (TREE_TYPE (op0), type, code)) { if (VECTOR_BOOLEAN_TYPE_P (type) && SCALAR_INT_MODE_P (TYPE_MODE (type)) |