From 06729598b0dc10dbe60545f21c2214ad66a5a3db Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 20 Oct 2020 13:15:45 +0200 Subject: [PATCH] Fix latch PHI arg lookup in vectorizable_reduction for double-reduction We were using the wrong loop to figure the latch arg of a double-reduction PHI. Which isn't a problem in case ->dest_idx match up with the outer loop edges - but that's of course not guaranteed. 2020-10-20 Richard Biener * tree-vect-loop.c (vectorizable_reduction): Use the correct loops latch edge for the PHI arg lookup. --- gcc/tree-vect-loop.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 991fd457229..6c29e00b280 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -6359,8 +6359,10 @@ vectorizable_reduction (loop_vec_info loop_vinfo, /* Verify following REDUC_IDX from the latch def leads us back to the PHI and compute the reduction chain length. Discover the real reduction operation stmt on the way (stmt_info and slp_for_stmt_info). */ - tree reduc_def = PHI_ARG_DEF_FROM_EDGE (reduc_def_phi, - loop_latch_edge (loop)); + tree reduc_def + = PHI_ARG_DEF_FROM_EDGE (reduc_def_phi, + loop_latch_edge + (gimple_bb (reduc_def_phi)->loop_father)); unsigned reduc_chain_length = 0; bool only_slp_reduc_chain = true; stmt_info = NULL; -- 2.30.2