From efc40c1f85bbeb2bf7e6f5cc5c3cfc6ceb59af07 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 13 Nov 2019 08:04:31 +0000 Subject: [PATCH] re PR target/92473 (test pr92324-2.c fails on arm and aarch64) 2019-11-13 Richard Biener PR tree-optimization/92473 * tree-vect-loop.c (vect_create_epilog_for_reduction): Perform direct optab reduction in the correct type. From-SVN: r278113 --- gcc/ChangeLog | 6 ++++++ gcc/tree-vect-loop.c | 30 ++++++------------------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8ebbec..968c273 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-11-13 Richard Biener + + PR tree-optimization/92473 + * tree-vect-loop.c (vect_create_epilog_for_reduction): Perform + direct optab reduction in the correct type. + 2019-11-12 Segher Boessenkool * config/rs6000/rs6000.md (rs6000_set_fpscr_drn): Use ULL on big diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 29770db..d9f4134 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -4739,31 +4739,13 @@ vect_create_epilog_for_reduction (stmt_vec_info stmt_info, dump_printf_loc (MSG_NOTE, vect_location, "Reduce using direct vector reduction.\n"); + gimple_seq stmts = NULL; + new_phi_result = gimple_convert (&stmts, vectype, new_phi_result); vec_elem_type = TREE_TYPE (TREE_TYPE (new_phi_result)); - if (!useless_type_conversion_p (scalar_type, vec_elem_type)) - { - tree tmp_dest - = vect_create_destination_var (scalar_dest, vec_elem_type); - epilog_stmt = gimple_build_call_internal (reduc_fn, 1, - new_phi_result); - gimple_set_lhs (epilog_stmt, tmp_dest); - new_temp = make_ssa_name (tmp_dest, epilog_stmt); - gimple_set_lhs (epilog_stmt, new_temp); - gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT); - - epilog_stmt = gimple_build_assign (new_scalar_dest, NOP_EXPR, - new_temp); - } - else - { - epilog_stmt = gimple_build_call_internal (reduc_fn, 1, - new_phi_result); - gimple_set_lhs (epilog_stmt, new_scalar_dest); - } - - new_temp = make_ssa_name (new_scalar_dest, epilog_stmt); - gimple_set_lhs (epilog_stmt, new_temp); - gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT); + new_temp = gimple_build (&stmts, as_combined_fn (reduc_fn), + vec_elem_type, new_phi_result); + new_temp = gimple_convert (&stmts, scalar_type, new_temp); + gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); if ((STMT_VINFO_REDUC_TYPE (reduc_info) == INTEGER_INDUC_COND_REDUCTION) && induc_val) -- 2.7.4