[PATCH] Avoid peeling for gaps if accesses are aligned

Richard Sandiford richard.sandiford@arm.com
Wed Mar 1 11:54:00 GMT 2017


Sorry for the late reply, but:

Richard Biener <rguenther@suse.de> writes:
> On Mon, 7 Nov 2016, Richard Biener wrote:
>
>> 
>> Currently we force peeling for gaps whenever element overrun can occur
>> but for aligned accesses we know that the loads won't trap and thus
>> we can avoid this.
>> 
>> Bootstrap and regtest running on x86_64-unknown-linux-gnu (I expect
>> some testsuite fallout here so didn't bother to invent a new testcase).
>> 
>> Just in case somebody thinks the overrun is a bad idea in general
>> (even when not trapping).  Like for ASAN or valgrind.
>
> This is what I applied.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu.
>
> Richard.
[...]
> diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
> index 15aec21..c29e73d 100644
> --- a/gcc/tree-vect-stmts.c
> +++ b/gcc/tree-vect-stmts.c
> @@ -1789,6 +1794,10 @@ get_group_load_store_type (gimple *stmt, tree vectype, bool slp,
>        /* If there is a gap at the end of the group then these optimizations
>  	 would access excess elements in the last iteration.  */
>        bool would_overrun_p = (gap != 0);
> +      /* If the access is aligned an overrun is fine.  */
> +      if (would_overrun_p
> +	  && aligned_access_p (STMT_VINFO_DATA_REF (stmt_info)))
> +	would_overrun_p = false;
>        if (!STMT_VINFO_STRIDED_P (stmt_info)
>  	  && (can_overrun_p || !would_overrun_p)
>  	  && compare_step_with_zero (stmt) > 0)

...is this right for all cases?  I think it only looks for single-vector
alignment, but the gap can in principle be vector-sized or larger,
at least for load-lanes.

E.g. say we have a 128-bit vector of doubles in a group of size 4
and a gap of 2 or 3.  Even if the access itself is aligned, the group
spans two vectors and we have no guarantee that the second one
is mapped.

I haven't been able to come up with a testcase though.  We seem to be
overly conservative when computing alignments.

Thanks,
Richard



More information about the Gcc-patches mailing list