diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/doc/sourcebuild.texi | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 10 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 3 |
6 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76fafa8..92c7622 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-11-29 Richard Sandiford <richard.sandiford@arm.com> + + * doc/sourcebuild.texi (vect_bool_cmp): Document. + * tree-vect-patterns.c (search_type_for_mask_1): If neither + operand to a boolean comparison is a natural vector mask, + handle both operands like normal integers instead. + 2019-11-29 Richard Biener <rguenther@suse.de> * tree-ssa-sccvn.c (vn_walk_cb_data::push_partial_def): Bail diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index a30db0d..3950c82 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1522,6 +1522,10 @@ Target does not support a vector add instruction on @code{int}. @item vect_no_bitwise Target does not support vector bitwise instructions. +@item vect_bool_cmp +Target supports comparison of @code{bool} vectors for at least one +vector length. + @item vect_char_add Target supports addition of @code{char} vectors for at least one vector length. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a096fa6..8c06ec3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-11-29 Richard Sandiford <richard.sandiford@arm.com> + + * gcc.dg/vect/vect-bool-cmp-2.c: New test. + * lib/target-supports.exp (check_effective_target_vect_bool_cmp): New + effective target procedure. + 2019-11-29 Tobias Burnus <tobias@codesourcery.com> * fortran.dg/goacc/common-block-3.f90: Check that unused common-block diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c new file mode 100644 index 0000000..1fb57ff --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ + +void +f (_Bool *restrict x, _Bool *restrict y) +{ + for (int i = 0; i < 128; ++i) + x[i] = x[i] == y[i]; +} + +/* { dg-final { scan-tree-dump "loop vectorized" "vect" { target vect_bool_cmp } } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index a4418a3..8f25d33 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -5749,6 +5749,16 @@ proc check_effective_target_vect_bswap { } { || [istarget amdgcn-*-*] }}] } +# Return 1 if the target supports comparison of bool vectors for at +# least one vector length. + +proc check_effective_target_vect_bool_cmp { } { + return [check_cached_effective_target_indexed vect_bool_cmp { + expr { [istarget i?86-*-*] || [istarget x86_64-*-*] + || [istarget aarch64*-*-*] + || [is-effective-target arm_neon] }}] +} + # Return 1 if the target supports addition of char vectors for at least # one vector length. diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index e4cfe85..6985214 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -3944,7 +3944,8 @@ search_type_for_mask_1 (tree var, vec_info *vinfo, vinfo, cache); if (!res || (res2 && TYPE_PRECISION (res) > TYPE_PRECISION (res2))) res = res2; - break; + if (res) + break; } comp_vectype = get_vectype_for_scalar_type (vinfo, TREE_TYPE (rhs1)); |