This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Add support for conditional reductions using SVE CLASTB
- From: Jeff Law <law at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org, richard dot sandiford at linaro dot org
- Date: Wed, 13 Dec 2017 09:59:00 -0700
- Subject: Re: Add support for conditional reductions using SVE CLASTB
- Authentication-results: sourceware.org; auth=none
- References: <87shdcylca.fsf@linaro.org>
On 11/17/2017 08:29 AM, Richard Sandiford wrote:
> This patch uses SVE CLASTB to optimise conditional reductions. It means
> that we no longer need to maintain a separate index vector to record
> the most recent valid value, and no longer need to worry about overflow
> cases.
>
> Tested on aarch64-linux-gnu (with and without SVE), x86_64-linux-gnu
> and powerpc64le-linux-gnu. OK to install?
>
> Richard
>
>
> 2017-11-17 Richard Sandiford <richard.sandiford@linaro.org>
> Alan Hayward <alan.hayward@arm.com>
> David Sherwood <david.sherwood@arm.com>
>
> gcc/
> * doc/md.texi (fold_extract_last_@var{m}): Document.
> * doc/sourcebuild.texi (vect_fold_extract_last): Likewise.
> * optabs.def (fold_extract_last_optab): New optab.
> * internal-fn.def (FOLD_EXTRACT_LAST): New internal function.
> * internal-fn.c (fold_extract_direct): New macro.
> (expand_fold_extract_optab_fn): Likewise.
> (direct_fold_extract_optab_supported_p): Likewise.
> * tree-vectorizer.h (EXTRACT_LAST_REDUCTION): New vect_reduction_type.
> * tree-vect-loop.c (vect_model_reduction_cost): Handle
> EXTRACT_LAST_REDUCTION.
> (get_initial_def_for_reduction): Do not create an initial vector
> for EXTRACT_LAST_REDUCTION reductions.
> (vectorizable_reduction): Leave the scalar phi in place for
> EXTRACT_LAST_REDUCTIONs. Try using EXTRACT_LAST_REDUCTION
> ahead of INTEGER_INDUC_COND_REDUCTION. Do not check for an
> epilogue code for EXTRACT_LAST_REDUCTION and defer the
> transform phase to vectorizable_condition.
> * tree-vect-stmts.c (vect_finish_stmt_generation_1): New function,
> split out from...
> (vect_finish_stmt_generation): ...here.
> (vect_finish_replace_stmt): New function.
> (vectorizable_condition): Handle EXTRACT_LAST_REDUCTION.
> * config/aarch64/aarch64-sve.md (fold_extract_last_<mode>): New
> pattern.
> * config/aarch64/aarch64.md (UNSPEC_CLASTB): New unspec.
>
> gcc/testsuite/
> * lib/target-supports.exp
> (check_effective_target_vect_fold_extract_last): New proc.
> * gcc.dg/vect/pr65947-1.c: Update dump messages. Add markup
> for fold_extract_last.
> * gcc.dg/vect/pr65947-2.c: Likewise.
> * gcc.dg/vect/pr65947-3.c: Likewise.
> * gcc.dg/vect/pr65947-4.c: Likewise.
> * gcc.dg/vect/pr65947-5.c: Likewise.
> * gcc.dg/vect/pr65947-6.c: Likewise.
> * gcc.dg/vect/pr65947-9.c: Likewise.
> * gcc.dg/vect/pr65947-10.c: Likewise.
> * gcc.dg/vect/pr65947-12.c: Likewise.
> * gcc.dg/vect/pr65947-13.c: Likewise.
> * gcc.dg/vect/pr65947-14.c: Likewise.
> * gcc.target/aarch64/sve_clastb_1.c: New test.
> * gcc.target/aarch64/sve_clastb_1_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_2.c: Likewise.
> * gcc.target/aarch64/sve_clastb_2_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_3.c: Likewise.
> * gcc.target/aarch64/sve_clastb_3_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_4.c: Likewise.
> * gcc.target/aarch64/sve_clastb_4_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_5.c: Likewise.
> * gcc.target/aarch64/sve_clastb_5_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_6.c: Likewise.
> * gcc.target/aarch64/sve_clastb_6_run.c: Likewise.
> * gcc.target/aarch64/sve_clastb_7.c: Likewise.
> * gcc.target/aarch64/sve_clastb_7_run.c: Likewise.
LIke some of the other patches, I focused just on the generic bits and
did not look at the aarch64 target bits. The generic bits are OK.
jeff