diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2022-10-28 12:38:43 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@codesourcery.com> | 2022-10-31 12:20:52 +0000 |
commit | f539029c1ce6fb9163422d1a8b6ac12a2554eaa2 (patch) | |
tree | 137b983b21f3fa14ce7244b62d4978753f5623d7 /gcc/gimple-range.cc | |
parent | 12a1085644c6c5446eece41d255ca1fd569149d4 (diff) | |
download | gcc-f539029c1ce6fb9163422d1a8b6ac12a2554eaa2.zip gcc-f539029c1ce6fb9163422d1a8b6ac12a2554eaa2.tar.gz gcc-f539029c1ce6fb9163422d1a8b6ac12a2554eaa2.tar.bz2 |
amdgcn: multi-size vector reductions
Add support for vector reductions for any vector width by switching iterators
and generalising the code slightly. There's no one-instruction way to move an
item from lane 31 to lane 0 (63, 15, 7, 3, and 1 are all fine though), and
vec_extract is probably fewer cycles anyway, so now we always reduce to an
SGPR.
gcc/ChangeLog:
* config/gcn/gcn-valu.md (V64_SI): Delete iterator.
(V64_DI): Likewise.
(V64_1REG): Likewise.
(V64_INT_1REG): Likewise.
(V64_2REG): Likewise.
(V64_ALL): Likewise.
(V64_FP): Likewise.
(reduc_<reduc_op>_scal_<mode>): Use V_ALL. Use gen_vec_extract.
(fold_left_plus_<mode>): Use V_FP.
(*<reduc_op>_dpp_shr_<mode>): Use V_1REG.
(*<reduc_op>_dpp_shr_<mode>): Use V_DI.
(*plus_carry_dpp_shr_<mode>): Use V_INT_1REG.
(*plus_carry_in_dpp_shr_<mode>): Use V_SI.
(*plus_carry_dpp_shr_<mode>): Use V_DI.
(mov_from_lane63_<mode>): Delete.
(mov_from_lane63_<mode>): Delete.
* config/gcn/gcn.cc (gcn_expand_reduc_scalar): Support partial vectors.
* config/gcn/gcn.md (unspec): Remove UNSPEC_MOV_FROM_LANE63.
Diffstat (limited to 'gcc/gimple-range.cc')
0 files changed, 0 insertions, 0 deletions