summaryrefslogtreecommitdiff
path: root/gcc/tree-if-conv.c
diff options
context:
space:
mode:
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-25 18:38:04 +0000
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-25 18:38:04 +0000
commitb519e9db13f7ccb059444df2395c0f3614c427e5 (patch)
tree8bd609215852906cf6f10e0388fceab4848130c3 /gcc/tree-if-conv.c
parent4bd0f929cfa5fcd5b8fac9eebbf027809b70f656 (diff)
downloadgcc-b519e9db13f7ccb059444df2395c0f3614c427e5.tar.gz
Call cleanup_tree_cfg after if-conversion.
2010-06-25 Sebastian Pop <sebastian.pop@amd.com> * tree-if-conv.c (combine_blocks): Remove FIXME comment. (tree_if_conversion): Returns true when something has been changed. (main_tree_if_conversion): Return TODO_cleanup_cfg when if-conversion changed something. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161396 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r--gcc/tree-if-conv.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index b7fe749c419..f200d480b59 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -1162,9 +1162,7 @@ combine_blocks (struct loop *loop)
/* If possible, merge loop header to the block with the exit edge.
This reduces the number of basic blocks to two, to please the
- vectorizer that handles only loops with two nodes.
-
- FIXME: Call cleanup_tree_cfg. */
+ vectorizer that handles only loops with two nodes. */
if (exit_bb
&& exit_bb != loop->header
&& can_merge_blocks_p (loop->header, exit_bb))
@@ -1172,11 +1170,12 @@ combine_blocks (struct loop *loop)
}
/* If-convert LOOP when it is legal. For the moment this pass has no
- profitability analysis. */
+ profitability analysis. Returns true when something changed. */
-static void
+static bool
tree_if_conversion (struct loop *loop)
{
+ bool changed = false;
ifc_bbs = NULL;
if (!if_convertible_loop_p (loop)
@@ -1187,6 +1186,7 @@ tree_if_conversion (struct loop *loop)
blocks into one huge basic block doing the if-conversion
on-the-fly. */
combine_blocks (loop);
+ changed = true;
cleanup:
if (ifc_bbs)
@@ -1199,6 +1199,8 @@ tree_if_conversion (struct loop *loop)
free (ifc_bbs);
ifc_bbs = NULL;
}
+
+ return changed;
}
/* Tree if-conversion pass management. */
@@ -1208,14 +1210,15 @@ main_tree_if_conversion (void)
{
loop_iterator li;
struct loop *loop;
+ bool changed = false;
if (number_of_loops () <= 1)
return 0;
FOR_EACH_LOOP (li, loop, 0)
- tree_if_conversion (loop);
+ changed |= tree_if_conversion (loop);
- return 0;
+ return changed ? TODO_cleanup_cfg : 0;
}
static bool