diff --git a/gcc/testsuite/gcc.dg/vect/pr109025.c b/gcc/testsuite/gcc.dg/vect/pr109025.c new file mode 100644 index 0000000000000000000000000000000000000000..13fb0ce4ba98f634a5dae0d44591beddc73ffa5a --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr109025.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3" } */ + +int func_4(int t, int b) +{ + for (int tt1 = 0; tt1 < 128 ; tt1 ++) + { + for (int tt = 0; tt < 128; tt ++) + if (b) + t |= 3; + t |= 3; + } + return t; +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index b17e8745d3fb5e18ad49c641ccbc83d149ca2aa4..320c15f144bab35763b81205beddb180d26916af 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -3894,6 +3894,8 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, return NULL; } + /* Verify there is an inner cycle composed of the PHI phi_use_stmt + and the latch definition op1. */ gimple *def1 = SSA_NAME_DEF_STMT (op1); if (gimple_bb (def1) && flow_bb_inside_loop_p (loop, gimple_bb (def_stmt)) @@ -3901,7 +3903,9 @@ vect_is_simple_reduction (loop_vec_info loop_info, stmt_vec_info phi_info, && flow_bb_inside_loop_p (loop->inner, gimple_bb (def1)) && (is_gimple_assign (def1) || is_gimple_call (def1)) && is_a <gphi *> (phi_use_stmt) - && flow_bb_inside_loop_p (loop->inner, gimple_bb (phi_use_stmt))) + && flow_bb_inside_loop_p (loop->inner, gimple_bb (phi_use_stmt)) + && (op1 == PHI_ARG_DEF_FROM_EDGE (phi_use_stmt, + loop_latch_edge (loop->inner)))) { if (dump_enabled_p ()) report_vect_op (MSG_NOTE, def_stmt,