2012-05-16 Richard Guenther <rguenther@suse.de>
+ * tree-vect-loop-manip.c (slpeel_update_phi_nodes_for_guard1):
+ Remove set-only bitmap of new names.
+ (slpeel_tree_peel_loop_to_edge): Likewise. Do not set
+ CFG hooks.
+ * tree-flow.h (ssa_names_to_replace): Remove.
+ * tree-into-ssa.c (ssa_names_to_replace): Likewise.
+
+2012-05-16 Richard Guenther <rguenther@suse.de>
+
PR tree-optimization/53364
* tree-ssa-alias.c (indirect_ref_may_alias_decl_p): Properly
detect a view-conversion of the decl.
}
-/* Return the set of all the SSA names marked to be replaced. */
-
-bitmap
-ssa_names_to_replace (void)
-{
- unsigned i = 0;
- bitmap ret;
- sbitmap_iterator sbi;
-
- gcc_assert (update_ssa_initialized_fn == NULL
- || update_ssa_initialized_fn == cfun);
-
- ret = BITMAP_ALLOC (NULL);
- EXECUTE_IF_SET_IN_SBITMAP (old_ssa_names, 0, i, sbi)
- bitmap_set_bit (ret, i);
-
- return ret;
-}
-
-
/* Mark NAME to be released after update_ssa has finished. */
void
static void
slpeel_update_phi_nodes_for_guard1 (edge guard_edge, struct loop *loop,
- bool is_new_loop, basic_block *new_exit_bb,
- bitmap *defs)
+ bool is_new_loop, basic_block *new_exit_bb)
{
gimple orig_phi, new_phi;
gimple update_phi, update_phi2;
gcc_assert (get_current_def (current_new_name) == NULL_TREE);
set_current_def (current_new_name, PHI_RESULT (new_phi));
- bitmap_set_bit (*defs, SSA_NAME_VERSION (current_new_name));
}
}
struct loop *new_loop = NULL, *first_loop, *second_loop;
edge skip_e;
tree pre_condition = NULL_TREE;
- bitmap definitions;
basic_block bb_before_second_loop, bb_after_second_loop;
basic_block bb_before_first_loop;
basic_block bb_between_loops;
if (!slpeel_can_duplicate_loop_p (loop, e))
return NULL;
- /* We have to initialize cfg_hooks. Then, when calling
- cfg_hooks->split_edge, the function tree_split_edge
- is actually called and, when calling cfg_hooks->duplicate_block,
- the function tree_duplicate_bb is called. */
- gimple_register_cfg_hooks ();
-
/* If the loop has a virtual PHI, but exit bb doesn't, create a virtual PHI
in the exit bb and rename all the uses after the loop. This simplifies
the *guard[12] routines, which assume loop closed SSA form for all PHIs
second_loop = loop;
}
- definitions = ssa_names_to_replace ();
slpeel_update_phis_for_duplicate_loop (loop, new_loop, e == exit_e);
rename_variables_in_loop (new_loop);
bb_before_second_loop, bb_before_first_loop);
slpeel_update_phi_nodes_for_guard1 (skip_e, first_loop,
first_loop == new_loop,
- &new_exit_bb, &definitions);
+ &new_exit_bb);
/* 3. Add the guard that controls whether the second loop is executed.
if (update_first_loop_count)
slpeel_make_loop_iterate_ntimes (first_loop, *first_niters);
- BITMAP_FREE (definitions);
delete_update_ssa ();
adjust_vec_debug_stmts ();