Add a VEC_SERIES rtl code

Programming / Compilers / GCC - rsandifo [138bc75d-0d04-0410-961f-82ee72b054a4] - 1 November 2017 11:22 EDT

This patch adds an rtl representation of a vector linear series of the form:

a[I] = BASE + I * STEP

Like vec_duplicate;

- the new rtx can be used for both constant and non-constant vectors- when used for constant vectors it is wrapped in a (const ...)- the constant form is only used for variable-length vectors; fixed-length vectors still use CONST_VECTOR

At the moment the code is restricted to integer elements, to avoid concerns over floating-point rounding.

2017-11-01 Richard Sandiford Alan Hayward David Sherwood

gcc/
- doc/rtl.texi (vec_series): Document. (const): Say that the operand can be a vec_series.
- rtl.def (VEC_SERIES): New rtx code.
- rtl.h (const_vec_series_p_1): Declare. (const_vec_series_p): New function.
- emit-rtl.h (gen_const_vec_series): Declare. (gen_vec_series): Likewise.
- emit-rtl.c (const_vec_series_p_1, gen_const_vec_series) (gen_vec_series): Likewise.
- optabs.c (expand_mult_highpart): Use gen_const_vec_series.
- simplify-rtx.c (simplify_unary_operation): Handle negations of vector series. (simplify_binary_operation_series): New function. (simplify_binary_operation_1): Use it. Handle VEC_SERIES. (test_vector_ops_series): New function. (test_vector_ops): Call it.
- config/powerpcspe/altivec.md (altivec_lvsl): Use gen_const_vec_series. (altivec_lvsr): Likewise.
- config/rs6000/altivec.md (altivec_lvsl, altivec_lvsr): Likewise.

ccc2ef18f54 Add a VEC_SERIES rtl code
gcc/ChangeLog | 25 +++++++
gcc/config/powerpcspe/altivec.md | 14 ++--
gcc/config/rs6000/altivec.md | 14 ++--
gcc/doc/rtl.texi | 7 +-
gcc/emit-rtl.c | 63 ++++++++++++++++++
gcc/emit-rtl.h | 3 +
gcc/optabs.c | 6 +-
gcc/rtl.def | 5 ++
gcc/rtl.h | 45 +++++++++++++
gcc/simplify-rtx.c | 136 ++++++++++++++++++++++++++++++++++++++-
10 files changed, 293 insertions(+), 25 deletions(-)

Upstream: gcc.gnu.org


  • Share