On 11/16/19 8:39 AM, Richard Sandiford wrote:
> This patch adds optabs that check whether a read followed by a write
> or a write followed by a read can be divided into interleaved byte
> accesses without changing the dependencies between the bytes.
> This is one of the uses of the SVE2 WHILERW and WHILEWR instructions.
> (The instructions can also be used to limit the VF at runtime,
> but that's future work.)
> 
> This applies on top of:
> 
>   https://gcc.gnu.org/ml/gcc-patches/2019-11/msg00787.html
> 
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?
> 
> Richard
> 
> 
> 2019-11-16  Richard Sandiford  <richard.sandif...@arm.com>
> 
> gcc/
>       * doc/sourcebuild.texi (vect_check_ptrs): Document.
>       * optabs.def (check_raw_ptrs_optab, check_war_ptrs_optab): New optabs.
>       * doc/md.texi: Document them.
>       * internal-fn.def (IFN_CHECK_RAW_PTRS, IFN_CHECK_WAR_PTRS): New
>       internal functions.
>       * internal-fn.h (internal_check_ptrs_fn_supported_p): Declare.
>       * internal-fn.c (check_ptrs_direct): New macro.
>       (expand_check_ptrs_optab_fn): Likewise.
>       (direct_check_ptrs_optab_supported_p): Likewise.
>       (internal_check_ptrs_fn_supported_p): New fuction.
>       * tree-data-ref.c: Include internal-fn.h.
>       (create_ifn_alias_checks): New function.
>       (create_intersect_range_checks): Use it.
>       * config/aarch64/iterators.md (SVE2_WHILE_PTR): New int iterator.
>       (optab, cmp_op): Handle it.
>       (raw_war, unspec): New int attributes.
>       * config/aarch64/aarch64.md (UNSPEC_WHILERW, UNSPEC_WHILE_WR): New
>       constants.
>       * config/aarch64/predicates.md (aarch64_bytes_per_sve_vector_operand):
>       New predicate.
>       * config/aarch64/aarch64-sve2.md (check_<raw_war>_ptrs<mode>): New
>       expander.
>       (@aarch64_sve2_while<cmp_op><GPI:mode><PRED_ALL:mode>_ptest): New
>       pattern.
> 
> gcc/testsuite/
>       * lib/target-supports.exp (check_effective_target_vect_check_ptrs):
>       New procedure.
>       * gcc.dg/vect/vect-alias-check-14.c: Expect IFN_CHECK_WAR to be
>       used, if available.
>       * gcc.dg/vect/vect-alias-check-15.c: Likewise.
>       * gcc.dg/vect/vect-alias-check-16.c: Likewise IFN_CHECK_RAW.
>       * gcc.target/aarch64/sve2/whilerw_1.c: New test.
>       * gcc.target/aarch64/sve2/whilewr_1.c: Likewise.
>       * gcc.target/aarch64/sve2/whilewr_2.c: Likewise.
>
OK
jeff

Reply via email to