diff options
author | Ira Rosen <ira.rosen@linaro.org> | 2011-08-05 11:12:28 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2011-08-05 11:12:28 +0000 |
commit | 2aacf3c3fc05f89c772053a0c5eed704fba89891 (patch) | |
tree | af67a85952b097ffc3a4c5afe1537a89a4c1d535 /gcc | |
parent | 0f36b2dafd0b61c7b473be85bc1ff85bf730a88a (diff) | |
download | gcc-2aacf3c3fc05f89c772053a0c5eed704fba89891.zip gcc-2aacf3c3fc05f89c772053a0c5eed704fba89891.tar.gz gcc-2aacf3c3fc05f89c772053a0c5eed704fba89891.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d86d24b..0087f05 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-08-05 Ira Rosen <ira.rosen@linaro.org> + + * 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 <rguenther@suse.de> PR tree-optimization/49984 diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 7b76596..afd03f2 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); |