From: Ira Rosen Date: Fri, 5 Aug 2011 11:12:28 +0000 (+0000) Subject: tree-vect-loop.c (vect_create_epilog_for_reduction): Use the result of multiple resul... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2aacf3c3fc05f89c772053a0c5eed704fba89891;p=gcc.git tree-vect-loop.c (vect_create_epilog_for_reduction): Use the result of multiple results reduction when... * tree-vect-loop.c (vect_create_epilog_for_reduction): Use the result of multiple results reduction when extracting the final value using scalar code. From-SVN: r177426 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d86d24bbcca..0087f055385 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-08-05 Ira Rosen + + * tree-vect-loop.c (vect_create_epilog_for_reduction): Use the + result of multiple results reduction when extracting the final + value using scalar code. + 2011-08-05 Richard Guenther PR tree-optimization/49984 diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 7b765964713..afd03f28ff1 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -3706,13 +3706,13 @@ vect_create_epilog_for_reduction (VEC (tree, heap) *vect_defs, gimple stmt, { tree first_vect = PHI_RESULT (VEC_index (gimple, new_phis, 0)); tree tmp; + gimple new_vec_stmt = NULL; vec_dest = vect_create_destination_var (scalar_dest, vectype); for (k = 1; k < VEC_length (gimple, new_phis); k++) { gimple next_phi = VEC_index (gimple, new_phis, k); tree second_vect = PHI_RESULT (next_phi); - gimple new_vec_stmt; tmp = build2 (code, vectype, first_vect, second_vect); new_vec_stmt = gimple_build_assign (vec_dest, tmp); @@ -3722,6 +3722,11 @@ vect_create_epilog_for_reduction (VEC (tree, heap) *vect_defs, gimple stmt, } new_phi_result = first_vect; + if (new_vec_stmt) + { + VEC_truncate (gimple, new_phis, 0); + VEC_safe_push (gimple, heap, new_phis, new_vec_stmt); + } } else new_phi_result = PHI_RESULT (VEC_index (gimple, new_phis, 0)); @@ -3832,7 +3837,10 @@ vect_create_epilog_for_reduction (VEC (tree, heap) *vect_defs, gimple stmt, vec_size_in_bits = tree_low_cst (TYPE_SIZE (vectype), 1); FOR_EACH_VEC_ELT (gimple, new_phis, i, new_phi) { - vec_temp = PHI_RESULT (new_phi); + if (gimple_code (new_phi) == GIMPLE_PHI) + vec_temp = PHI_RESULT (new_phi); + else + vec_temp = gimple_assign_lhs (new_phi); rhs = build3 (BIT_FIELD_REF, scalar_type, vec_temp, bitsize, bitsize_zero_node); epilog_stmt = gimple_build_assign (new_scalar_dest, rhs);