diff options
author | Ju-Zhe Zhong <juzhe.zhong@rivai.ai> | 2023-07-03 19:09:12 +0800 |
---|---|---|
committer | Pan Li <pan2.li@intel.com> | 2023-07-04 11:08:15 +0800 |
commit | db3efdaff59374063bde93764a0dff3317e04b22 (patch) | |
tree | 6cc9441064ee6b26d1b4feccb85fb0b4a4ac739a /gcc/tree-vect-loop-manip.cc | |
parent | c26f275861378cb4e339563b22e06cc8e2dc8120 (diff) | |
download | gcc-db3efdaff59374063bde93764a0dff3317e04b22.zip gcc-db3efdaff59374063bde93764a0dff3317e04b22.tar.gz gcc-db3efdaff59374063bde93764a0dff3317e04b22.tar.bz2 |
Machine Description: Add LEN_MASK_{GATHER_LOAD, SCATTER_STORE} pattern
Hi, Richi and Richard.
Base one the review comments from Richard:
https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623405.html
I change len_mask_gather_load/len_mask_scatter_store order into:
{len,bias,mask}
We adjust adding len and mask using using add_len_and_mask_args
which is same as partial_load/parial_store.
Now, the codes become more reasonable and easier maintain.
This patch is adding LEN_MASK_{GATHER_LOAD,SCATTER_STORE} to allow targets
handle flow control by mask and loop control by length on gather/scatter memory
operations. Consider this following case:
void
f (uint8_t *restrict a,
uint8_t *restrict b, int n,
int base, int step,
int *restrict cond)
{
for (int i = 0; i < n; ++i)
{
if (cond[i])
a[i * step + base] = b[i * step + base];
}
}
We hope RVV can vectorize such case into following IR:
loop_len = SELECT_VL
control_mask = comparison
v = LEN_MASK_GATHER_LOAD (.., loop_len, bias, control_mask)
LEN_SCATTER_STORE (... v, ..., loop_len, bias, control_mask)
This patch doesn't apply such patterns into vectorizer, just add patterns
and update the documents.
Will send patch which apply such patterns into vectorizer soon after this
patch is approved.
Ok for trunk?
gcc/ChangeLog:
* doc/md.texi: Add len_mask_gather_load/len_mask_scatter_store.
* internal-fn.cc (expand_scatter_store_optab_fn): Ditto.
(expand_gather_load_optab_fn): Ditto.
(internal_load_fn_p): Ditto.
(internal_store_fn_p): Ditto.
(internal_gather_scatter_fn_p): Ditto.
(internal_fn_len_index): Ditto.
(internal_fn_mask_index): Ditto.
(internal_fn_stored_value_index): Ditto.
* internal-fn.def (LEN_MASK_GATHER_LOAD): Ditto.
(LEN_MASK_SCATTER_STORE): Ditto.
* optabs.def (OPTAB_CD): Ditto.
Diffstat (limited to 'gcc/tree-vect-loop-manip.cc')
0 files changed, 0 insertions, 0 deletions