tree-optimization/111115 - SLP of masked stores
commita1558e9ad856938f165f838733955b331ebbec09
authorRichard Biener <rguenther@suse.de>
Wed, 23 Aug 2023 12:28:26 +0000 (23 14:28 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 24 Aug 2023 09:38:55 +0000 (24 11:38 +0200)
tree970eacbfa0fd5d24cd4d84934a8e3eea83805f95
parente80f7c13f64e10c6a3354c5d6b42da60b21ed0b8
tree-optimization/111115 - SLP of masked stores

The following adds the capability to do SLP on .MASK_STORE, I do not
plan to add interleaving support.

PR tree-optimization/111115
gcc/
* tree-vectorizer.h (vect_slp_child_index_for_operand): New.
* tree-vect-data-refs.cc (can_group_stmts_p): Also group
.MASK_STORE.
* tree-vect-slp.cc (arg3_arg2_map): New.
(vect_get_operand_map): Handle IFN_MASK_STORE.
(vect_slp_child_index_for_operand): New function.
(vect_build_slp_tree_1): Handle statements with no LHS,
masked store ifns.
(vect_remove_slp_scalar_calls): Likewise.
* tree-vect-stmts.cc (vect_check_store_rhs): Lookup the
SLP child corresponding to the ifn value index.
(vectorizable_store): Likewise for the mask index.  Support
masked stores.
(vectorizable_load): Lookup the SLP child corresponding to the
ifn mask index.

gcc/testsuite/
* lib/target-supports.exp (check_effective_target_vect_masked_store):
Supported with check_avx_available.
* gcc.dg/vect/slp-mask-store-1.c: New testcase.
gcc/testsuite/gcc.dg/vect/slp-mask-store-1.c [new file with mode: 0644]
gcc/testsuite/lib/target-supports.exp
gcc/tree-vect-data-refs.cc
gcc/tree-vect-slp.cc
gcc/tree-vect-stmts.cc
gcc/tree-vectorizer.h