This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Add support for conditional reductions using SVE CLASTB


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]