Commit 3884da6f by Bin Cheng Committed by Bin Cheng

tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg): Put duplicated…

tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg): Put duplicated loop after its preheader and after the original loop.

	* tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg): Put
	duplicated loop after its preheader and after the original loop.

From-SVN: r241098
parent 328ba117
2016-10-13 Bin Cheng <bin.cheng@arm.com> 2016-10-13 Bin Cheng <bin.cheng@arm.com>
* tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg): Put
duplicated loop after its preheader and after the original loop.
2016-10-13 Bin Cheng <bin.cheng@arm.com>
* tree-vect-loop.c (vect_analyze_loop_2): Check and skip loop if it * tree-vect-loop.c (vect_analyze_loop_2): Check and skip loop if it
has no enough iterations for LOOP_VINFO_PEELING_FOR_GAPS. has no enough iterations for LOOP_VINFO_PEELING_FOR_GAPS.
......
...@@ -776,7 +776,7 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop, ...@@ -776,7 +776,7 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop,
struct loop *scalar_loop, edge e) struct loop *scalar_loop, edge e)
{ {
struct loop *new_loop; struct loop *new_loop;
basic_block *new_bbs, *bbs; basic_block *new_bbs, *bbs, *pbbs;
bool at_exit; bool at_exit;
bool was_imm_dom; bool was_imm_dom;
basic_block exit_dest; basic_block exit_dest;
...@@ -792,12 +792,13 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop, ...@@ -792,12 +792,13 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop,
scalar_loop = loop; scalar_loop = loop;
bbs = XNEWVEC (basic_block, scalar_loop->num_nodes + 1); bbs = XNEWVEC (basic_block, scalar_loop->num_nodes + 1);
get_loop_body_with_size (scalar_loop, bbs, scalar_loop->num_nodes); pbbs = bbs + 1;
get_loop_body_with_size (scalar_loop, pbbs, scalar_loop->num_nodes);
/* Allow duplication of outer loops. */ /* Allow duplication of outer loops. */
if (scalar_loop->inner) if (scalar_loop->inner)
duplicate_outer_loop = true; duplicate_outer_loop = true;
/* Check whether duplication is possible. */ /* Check whether duplication is possible. */
if (!can_copy_bbs_p (bbs, scalar_loop->num_nodes)) if (!can_copy_bbs_p (pbbs, scalar_loop->num_nodes))
{ {
free (bbs); free (bbs);
return NULL; return NULL;
...@@ -817,15 +818,15 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop, ...@@ -817,15 +818,15 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop,
pre-header unconditionally for this. */ pre-header unconditionally for this. */
basic_block preheader = split_edge (loop_preheader_edge (scalar_loop)); basic_block preheader = split_edge (loop_preheader_edge (scalar_loop));
edge entry_e = single_pred_edge (preheader); edge entry_e = single_pred_edge (preheader);
bbs[scalar_loop->num_nodes] = preheader; bbs[0] = preheader;
new_bbs = XNEWVEC (basic_block, scalar_loop->num_nodes + 1); new_bbs = XNEWVEC (basic_block, scalar_loop->num_nodes + 1);
exit = single_exit (scalar_loop); exit = single_exit (scalar_loop);
copy_bbs (bbs, scalar_loop->num_nodes + 1, new_bbs, copy_bbs (bbs, scalar_loop->num_nodes + 1, new_bbs,
&exit, 1, &new_exit, NULL, &exit, 1, &new_exit, NULL,
e->src, true); at_exit ? loop->latch : e->src, true);
exit = single_exit (loop); exit = single_exit (loop);
basic_block new_preheader = new_bbs[scalar_loop->num_nodes]; basic_block new_preheader = new_bbs[0];
add_phi_args_after_copy (new_bbs, scalar_loop->num_nodes + 1, NULL); add_phi_args_after_copy (new_bbs, scalar_loop->num_nodes + 1, NULL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment