aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2008-06-19 15:42:14 +0000
committerSebastian Pop <sebastian.pop@amd.com>2008-06-19 15:42:14 +0000
commit6c0f19a602cee08c7aefdaaf367aa51b95d4d4eb (patch)
treec94eeefe88e9ecbcced398096d5c782bcbefb0a9
parentfdc6cd45ac886079bcd43d2ce8ec9aaf8a196911 (diff)
2008-06-19 Sebastian Pop <sebastian.pop@amd.com>
* cfgloopmanip.c: Add missing function comments, fix formatting. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/graphite@136950 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.graphite4
-rw-r--r--gcc/cfgloop.h1
-rw-r--r--gcc/cfgloopmanip.c45
3 files changed, 28 insertions, 22 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 379db0c1861..2e3d6d3d1ae 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,7 @@
+2008-06-19 Sebastian Pop <sebastian.pop@amd.com>
+
+ * cfgloopmanip.c: Add missing function comments, fix formatting.
+
2008-06-18 Konrad Trifunovic <konrad.trifunovic@inria.fr>
* cfgloopmanip.c (update_dominators_in_loop): Defined.
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index f429a66ec4a..6d5e0dfd1c9 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -279,7 +279,6 @@ extern bool can_duplicate_loop_p (const struct loop *loop);
#define DLTHE_FLAG_COMPLETTE_PEEL 4 /* Update frequencies expecting
a complete peeling. */
-
extern struct loop *create_empty_loop_on_edge (edge, tree, tree,
tree, tree, tree *, struct loop *);
extern void update_dominators_in_loop (struct loop* loop);
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index cb133d793df..effa4a9dd02 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -466,9 +466,10 @@ scale_loop_frequencies (struct loop *loop, int num, int den)
free (bbs);
}
-void update_dominators_in_loop (struct loop* loop)
+/* Recompute dominance information for basic blocks outside LOOP. */
+
+void update_dominators_in_loop (struct loop *loop)
{
- /* Update dominators of blocks outside of LOOP. */
VEC (basic_block, heap) *dom_bbs = NULL;
sbitmap seen;
basic_block *body;
@@ -501,7 +502,12 @@ void update_dominators_in_loop (struct loop* loop)
VEC_free (basic_block, heap, dom_bbs);
}
-/* create_empty_loop_on_edge
+/* Creates and returns a new empty loop on ENTRY_EDGE. A new
+ induction variable is created, with name IV, initial value
+ INITIAL_VALUE, a stride STRIDE and upper bound UPB is created, and
+ the value after its increment is returned in VAR_AFTER. The outer
+ loop containing this loop is OUTER.
+
|
| ------------- -----------------------
| | pred_bb | | pred_bb |
@@ -541,13 +547,13 @@ create_empty_loop_on_edge (edge entry_edge,
edge exit_e;
int prob;
- gcc_assert (entry_edge != NULL);
- gcc_assert (initial_value != NULL);
- gcc_assert (stride != NULL);
- gcc_assert (upb != NULL);
- gcc_assert (iv != NULL);
+ gcc_assert (entry_edge);
+ gcc_assert (initial_value);
+ gcc_assert (stride);
+ gcc_assert (upb);
+ gcc_assert (iv);
- /* Create header, latch and wire up the loop */
+ /* Create header, latch and wire up the loop. */
pred_bb = entry_edge->src;
loop_header = split_edge (entry_edge);
loop_latch = split_edge (single_succ_edge (loop_header));
@@ -555,21 +561,20 @@ create_empty_loop_on_edge (edge entry_edge,
make_edge (loop_header, succ_bb, 0);
redirect_edge_succ_nodup (single_succ_edge (loop_latch), loop_header);
- /* set imm dominator info */
+ /* Set immediate dominator information. */
set_immediate_dominator (CDI_DOMINATORS, loop_header, pred_bb);
set_immediate_dominator (CDI_DOMINATORS, loop_latch, loop_header);
set_immediate_dominator (CDI_DOMINATORS, succ_bb, loop_header);
- /* init loop structure and put in loop hierarchy */
+ /* Initialize a loop structure and put it in a loop hierarchy. */
loop = alloc_loop ();
loop->header = loop_header;
loop->latch = loop_latch;
outer = succ_bb->loop_father;
- add_loop (loop,outer);
-
+ add_loop (loop, outer);
- /* set frequencies */
+ /* Set frequencies. */
freq = EDGE_FREQUENCY (entry_edge);
cnt = entry_edge->count;
@@ -577,10 +582,10 @@ create_empty_loop_on_edge (edge entry_edge,
scale_loop_frequencies (loop, REG_BR_PROB_BASE - prob, REG_BR_PROB_BASE);
scale_loop_frequencies (outer, prob, REG_BR_PROB_BASE);
- /* update dominators */
+ /* Update dominators. */
update_dominators_in_loop (loop);
- /* construct IV code in loop */
+ /* Construct IV code in loop. */
initial_value = force_gimple_operand (initial_value, &stmts, true, iv);
if (stmts)
{
@@ -594,14 +599,13 @@ create_empty_loop_on_edge (edge entry_edge,
*var_after = iv;
exit_e = single_exit (loop);
bsi = bsi_last (exit_e->src);
-
-
+
exit_cond = build2 (LT_EXPR, boolean_type_node, upb, iv);
exit_cond = build3 (COND_EXPR, void_type_node, exit_cond,
NULL_TREE, NULL_TREE);
- exit_test = TREE_OPERAND(exit_cond, 0);
+ exit_test = TREE_OPERAND (exit_cond, 0);
exit_test = force_gimple_operand (exit_test, &stmts, true, NULL);
- TREE_OPERAND (exit_cond,0) = exit_test;
+ TREE_OPERAND (exit_cond, 0) = exit_test;
if (stmts)
bsi_insert_after (&bsi, stmts, BSI_NEW_STMT);
@@ -610,7 +614,6 @@ create_empty_loop_on_edge (edge entry_edge,
return loop;
}
-
/* Make area between HEADER_EDGE and LATCH_EDGE a loop by connecting
latch to header and update loop tree and dominators
accordingly. Everything between them plus LATCH_EDGE destination must