Commit 4caa8e21 by Sebastian Pop Committed by Sebastian Pop

Fix PR43083: Do not handle regions ending with multiple edges on the exit BB.

2010-02-22  Sebastian Pop  <sebastian.pop@amd.com>

	PR middle-end/43083
	* graphite-scop-detection.c (create_single_exit_edge): Move
	the call to find_single_exit_edge to....
	(create_sese_edges): ...here.  Don't handle multiple edges
	exiting the function.
	(build_graphite_scops): Don't handle multiple edges
	exiting the function.

	* gcc.dg/graphite/pr43083.c: New.

From-SVN: r156997
parent b8df8b8b
2010-02-22 Sebastian Pop <sebastian.pop@amd.com> 2010-02-22 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/43083
* graphite-scop-detection.c (create_single_exit_edge): Move
the call to find_single_exit_edge to....
(create_sese_edges): ...here. Don't handle multiple edges
exiting the function.
(build_graphite_scops): Don't handle multiple edges
exiting the function.
* gcc.dg/graphite/pr43083.c: New.
2010-02-22 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/43097 PR middle-end/43097
* sese.c (get_rename): Assert that old_name is an SSA_NAME. * sese.c (get_rename): Assert that old_name is an SSA_NAME.
(rename_variables_in_stmt): Continue when the use is not an SSA_NAME. (rename_variables_in_stmt): Continue when the use is not an SSA_NAME.
......
...@@ -935,9 +935,6 @@ create_single_exit_edge (sd_region *region) ...@@ -935,9 +935,6 @@ create_single_exit_edge (sd_region *region)
edge forwarder = NULL; edge forwarder = NULL;
basic_block exit; basic_block exit;
if (find_single_exit_edge (region))
return;
/* We create a forwarder bb (5) for all edges leaving this region /* We create a forwarder bb (5) for all edges leaving this region
(3->5, 4->5). All other edges leading to the same bb, are moved (3->5, 4->5). All other edges leading to the same bb, are moved
to a new bb (6). If these edges where part of another region (2->5) to a new bb (6). If these edges where part of another region (2->5)
...@@ -1031,7 +1028,10 @@ create_sese_edges (VEC (sd_region, heap) *regions) ...@@ -1031,7 +1028,10 @@ create_sese_edges (VEC (sd_region, heap) *regions)
mark_exit_edges (regions); mark_exit_edges (regions);
for (i = 0; VEC_iterate (sd_region, regions, i, s); i++) for (i = 0; VEC_iterate (sd_region, regions, i, s); i++)
create_single_exit_edge (s); /* Don't handle multiple edges exiting the function. */
if (!find_single_exit_edge (s)
&& s->exit != EXIT_BLOCK_PTR)
create_single_exit_edge (s);
unmark_exit_edges (regions); unmark_exit_edges (regions);
...@@ -1057,7 +1057,12 @@ build_graphite_scops (VEC (sd_region, heap) *regions, ...@@ -1057,7 +1057,12 @@ build_graphite_scops (VEC (sd_region, heap) *regions,
{ {
edge entry = find_single_entry_edge (s); edge entry = find_single_entry_edge (s);
edge exit = find_single_exit_edge (s); edge exit = find_single_exit_edge (s);
scop_p scop = new_scop (new_sese (entry, exit)); scop_p scop;
if (!exit)
continue;
scop = new_scop (new_sese (entry, exit));
VEC_safe_push (scop_p, heap, *scops, scop); VEC_safe_push (scop_p, heap, *scops, scop);
/* Are there overlapping SCoPs? */ /* Are there overlapping SCoPs? */
...@@ -1323,7 +1328,7 @@ build_scops (VEC (scop_p, heap) **scops) ...@@ -1323,7 +1328,7 @@ build_scops (VEC (scop_p, heap) **scops)
canonicalize_loop_closed_ssa_form (); canonicalize_loop_closed_ssa_form ();
build_scops_1 (single_succ (ENTRY_BLOCK_PTR), ENTRY_BLOCK_PTR->loop_father, build_scops_1 (single_succ (ENTRY_BLOCK_PTR), ENTRY_BLOCK_PTR->loop_father,
&regions, loop); &regions, loop);
create_sese_edges (regions); create_sese_edges (regions);
build_graphite_scops (regions, scops); build_graphite_scops (regions, scops);
......
/* { dg-options "-O3 -fgraphite-identity" } */
extern void baz(void);
static inline int bar(void)
{
int i;
for (i = 0; i < 10; i++) baz();
}
int foo(void)
{
if (bar() != 0) return 0;
}
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