From: Pan Li <pan2...@intel.com> Consider the expand_const_vector is quit long (about 500 lines) and complicated, we would like to extract the different case into different functions. For example, the const vec_series will be extracted into expand_const_vec_series.
The below test suites are passed for this patch. * The rv64gcv fully regression test. gcc/ChangeLog: * config/riscv/riscv-v.cc (expand_const_vec_series): Add new func to take care of the const vec_series. (expand_const_vector): Extract const vec_series into separated function. Signed-off-by: Pan Li <pan2...@intel.com> --- gcc/config/riscv/riscv-v.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 1eb14a24e3d..e0af296449c 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -1224,6 +1224,18 @@ expand_const_vec_duplicate (rtx target, rtx src, rtx elt) emit_move_insn (target, result); } +static void +expand_const_vec_series (rtx target, rtx base, rtx step) +{ + machine_mode mode = GET_MODE (target); + rtx result = register_operand (target, mode) ? target : gen_reg_rtx (mode); + + expand_vec_series (result, base, step); + + if (result != target) + emit_move_insn (target, result); +} + static void expand_const_vector (rtx target, rtx src) { @@ -1237,13 +1249,7 @@ expand_const_vector (rtx target, rtx src) /* Support scalable const series vector. */ rtx base, step; if (const_vec_series_p (src, &base, &step)) - { - expand_vec_series (result, base, step); - - if (result != target) - emit_move_insn (target, result); - return; - } + return expand_const_vec_series (target, base, step); /* Handle variable-length vector. */ unsigned int nelts_per_pattern = CONST_VECTOR_NELTS_PER_PATTERN (src); -- 2.43.0