rs6000: Enable 32bit variable vec_insert [PR99718]
authorluoxhu@cn.ibm.com <luoxhu@cn.ibm.com>
Sat, 27 Mar 2021 03:26:57 +0000 (22:26 -0500)
committerSegher Boessenkool <segher@kernel.crashing.org>
Tue, 30 Mar 2021 13:43:21 +0000 (13:43 +0000)
commitf64b91568f3ac8f152c6c617b4fcc6b51da10ac4
treeb414a01986e5b7d164aaf16237b2591bce39812a
parent5463cee277038df4688b61144db498ae7d24e631
rs6000: Enable 32bit variable vec_insert [PR99718]

32bit and P7 VSX could also benefit a lot from the variable vec_insert
implementation with shift/insert/shift back method.

2011-03-29  Xionghu Luo  <luoxhu@linux.ibm.com>

PR target/99718
* config/rs6000/altivec.md (altivec_lvsl_reg): Change to ...
(altivec_lvsl_reg_<mode>): ... this.
(altivec_lvsr_reg): Change to ...
(altivec_lvsr_reg_<mode>): ... this.
* config/rs6000/predicates.md (vec_set_index_operand): New.
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
Enable 32bit variable vec_insert for all TARGET_VSX.
* config/rs6000/rs6000.c (rs6000_expand_vector_set_var_p9):
Enable 32bit variable vec_insert for p9 and above.
(rs6000_expand_vector_set_var_p8): Rename to ...
(rs6000_expand_vector_set_var_p7): ... this.
(rs6000_expand_vector_set): Use TARGET_VSX and adjust assert
position.
* config/rs6000/vector.md (vec_set<mode>): Use vec_set_index_operand.
* config/rs6000/vsx.md (xl_len_r): Use gen_altivec_lvsl_reg_di and
gen_altivec_lvsr_reg_di.

gcc/testsuite/
PR target/99718
* gcc.target/powerpc/fold-vec-insert-char-p8.c: Update
instruction counts.
* gcc.target/powerpc/fold-vec-insert-char-p9.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-double.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-float-p8.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-float-p9.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-int-p8.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-int-p9.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-longlong.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-short-p8.c: Likewise.
* gcc.target/powerpc/fold-vec-insert-short-p9.c: Likewise.
* gcc.target/powerpc/pr79251.p8.c: Likewise.
* gcc.target/powerpc/pr79251.p9.c: Likewise.
* gcc.target/powerpc/vsx-builtin-7.c: Likewise.
* gcc.target/powerpc/pr79251-run.p7.c: New test.
* gcc.target/powerpc/pr79251.p7.c: New test.
21 files changed:
gcc/config/rs6000/altivec.md
gcc/config/rs6000/predicates.md
gcc/config/rs6000/rs6000-c.c
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/vector.md
gcc/config/rs6000/vsx.md
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-char-p8.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-char-p9.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-double.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-float-p8.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-float-p9.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-int-p8.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-int-p9.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-longlong.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-short-p8.c
gcc/testsuite/gcc.target/powerpc/fold-vec-insert-short-p9.c
gcc/testsuite/gcc.target/powerpc/pr79251-run.p7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr79251.p7.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr79251.p8.c
gcc/testsuite/gcc.target/powerpc/pr79251.p9.c
gcc/testsuite/gcc.target/powerpc/vsx-builtin-7.c