+2010-11-18 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/46172
+ * tree-vect-loop-manip.c (remove_dead_stmts_from_loop): New
+ function.
+ (slpeel_tree_peel_loop_to_edge): Call it.
+
2010-11-18 Jeff Law <law@redhat.com>
PR middle-end-optimization/46297
+2010-11-18 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/46172
+ * gcc.dg/torture/pr46172.c: New testcase.
+
2010-11-18 Jeff Law <law@redhat.com>
PR middle-end-optimization/46297
}
+/* Remove dead assignments from loop NEW_LOOP. */
+
+static void
+remove_dead_stmts_from_loop (struct loop *new_loop)
+{
+ basic_block *bbs = get_loop_body (new_loop);
+ unsigned i;
+ for (i = 0; i < new_loop->num_nodes; ++i)
+ {
+ gimple_stmt_iterator gsi;
+ for (gsi = gsi_start_bb (bbs[i]); !gsi_end_p (gsi);)
+ {
+ gimple stmt = gsi_stmt (gsi);
+ if (is_gimple_assign (stmt)
+ && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME
+ && has_zero_uses (gimple_assign_lhs (stmt)))
+ {
+ gsi_remove (&gsi, true);
+ release_defs (stmt);
+ }
+ else
+ gsi_next (&gsi);
+ }
+ }
+ free (bbs);
+}
+
+
/* Function slpeel_tree_peel_loop_to_edge.
Peel the first (last) iterations of LOOP into a new prolog (epilog) loop
if (update_first_loop_count)
slpeel_make_loop_iterate_ntimes (first_loop, first_niters);
+ /* Remove all pattern statements from the loop copy. They will confuse
+ the expander if DCE is disabled.
+ ??? The pattern recognizer should be split into an analysis and
+ a transformation phase that is then run only on the loop that is
+ going to be transformed. */
+ remove_dead_stmts_from_loop (new_loop);
+
adjust_vec_debug_stmts ();
BITMAP_FREE (definitions);