diff options
Diffstat (limited to 'gcc/tree-vect-slp.c')
-rw-r--r-- | gcc/tree-vect-slp.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index d5bd92ec031..30e8c153fe6 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2409,6 +2409,11 @@ vect_bb_slp_scalar_cost (basic_block bb, if ((*life)[i]) continue; + /* Count scalar stmts only once. */ + if (gimple_visited_p (stmt)) + continue; + gimple_set_visited (stmt, true); + stmt_info = vinfo_for_stmt (stmt); if (STMT_VINFO_DATA_REF (stmt_info)) { @@ -2451,6 +2456,11 @@ vect_bb_vectorization_profitable_p (bb_vec_info bb_vinfo) &life); } + /* Unset visited flag. */ + for (gimple_stmt_iterator gsi = bb_vinfo->region_begin; + gsi_stmt (gsi) != gsi_stmt (bb_vinfo->region_end); gsi_next (&gsi)) + gimple_set_visited (gsi_stmt (gsi), false); + /* Complete the target-specific cost calculation. */ finish_cost (BB_VINFO_TARGET_COST_DATA (bb_vinfo), &vec_prologue_cost, &vec_inside_cost, &vec_epilogue_cost); |