diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-30 09:52:28 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-30 09:52:28 +0000 |
commit | 8bb81b3c4945dbae8d490e7a4054ddeb5a3b506c (patch) | |
tree | ddce352a9a236aa554657cb5f1c6a412ddb6a7c0 /gcc | |
parent | 9b577047eec65936a5299cac13dd7b73cdfc4ae4 (diff) | |
download | gcc-8bb81b3c4945dbae8d490e7a4054ddeb5a3b506c.zip gcc-8bb81b3c4945dbae8d490e7a4054ddeb5a3b506c.tar.gz gcc-8bb81b3c4945dbae8d490e7a4054ddeb5a3b506c.tar.bz2 |
vect: Fix SVE mask_gather_load/store_store tests
If-conversion now applies rewrite_to_defined_overflow to the
address calculation in an IFN_MASK_LOAD. This means that we
end up with:
cast_base = (uintptr_t) base;
uncast_sum = cast_base + offset;
sum = (orig_type *) uncast_sum;
If the target supports IFN_MASK_GATHER_LOAD with pointer-sized
offsets for the given vectype, we wouldn't look through the sum
cast and so would needlessly vectorise the uncast_sum addition.
This showed up as several failures in gcc.target/aarch64/sve.
gcc/
* tree-vect-data-refs.c (vect_check_gather_scatter): Continue
processing conversions if the current offset is a pointer.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index f1d7f01..888ad72 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -4139,6 +4139,7 @@ vect_check_gather_scatter (stmt_vec_info stmt_info, loop_vec_info loop_vinfo, /* Don't include the conversion if the target is happy with the current offset type. */ if (use_ifn_p + && !POINTER_TYPE_P (TREE_TYPE (off)) && vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr), masked_p, vectype, memory_type, TREE_TYPE (off), scale, &ifn, |