aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-25 08:08:44 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-25 08:08:44 +0000
commitea133b14f48ed5730748a7e02e322fb07ccc2d85 (patch)
treec5952a91138d366ad57f8295ba59f1dd378ed1ab /gcc/tree-vect-loop.c
parenta0f9baa2952727d22ed55fdd8c6eb3c75a0864e0 (diff)
downloadgcc-ea133b14f48ed5730748a7e02e322fb07ccc2d85.zip
gcc-ea133b14f48ed5730748a7e02e322fb07ccc2d85.tar.gz
gcc-ea133b14f48ed5730748a7e02e322fb07ccc2d85.tar.bz2
tree-vect-loop.c (vectorizable_reduction): Verify STMT_VINFO_REDUC_IDX on the to be vectorized stmts is set up correctly.
2019-10-25 Richard Biener <rguenther@suse.de> * tree-vect-loop.c (vectorizable_reduction): Verify STMT_VINFO_REDUC_IDX on the to be vectorized stmts is set up correctly. * tree-vect-patterns.c (vect_mark_pattern_stmts): Transfer STMT_VINFO_REDUC_IDX from the original stmts to the pattern stmts. From-SVN: r277437
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r--gcc/tree-vect-loop.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 9c5ce47..d0fd7bdb 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -5719,7 +5719,19 @@ vectorizable_reduction (stmt_vec_info stmt_info, slp_tree slp_node,
/* PHIs should not participate in patterns. */
gcc_assert (!STMT_VINFO_RELATED_STMT (phi_info));
gphi *reduc_def_phi = as_a <gphi *> (phi_info->stmt);
- tree reduc_def = PHI_RESULT (reduc_def_phi);
+
+ /* Verify following REDUC_IDX from the latch def leads us back to the PHI. */
+ tree reduc_def = PHI_ARG_DEF_FROM_EDGE (reduc_def_phi,
+ loop_latch_edge (loop));
+ while (reduc_def != PHI_RESULT (reduc_def_phi))
+ {
+ stmt_vec_info def = loop_vinfo->lookup_def (reduc_def);
+ def = vect_stmt_to_vectorize (def);
+ gcc_assert (STMT_VINFO_REDUC_IDX (def) != -1);
+ reduc_def = gimple_op (def->stmt, 1 + STMT_VINFO_REDUC_IDX (def));
+ }
+
+ reduc_def = PHI_RESULT (reduc_def_phi);
int reduc_index = -1;
for (i = 0; i < op_type; i++)
{