Commit afc3f396 by Kazu Hirata Committed by Kazu Hirata

tree-cfg.c (thread_jumps): Speed up by putting basic blocks into worklist instead of their indexes.

	* tree-cfg.c (thread_jumps): Speed up by putting basic blocks
	into worklist instead of their indexes.

From-SVN: r89461
parent 7651d1b8
2004-10-22 Kazu Hirata <kazu@cs.umass.edu> 2004-10-22 Kazu Hirata <kazu@cs.umass.edu>
* tree-cfg.c (thread_jumps): Speed up by putting basic blocks
into worklist instead of their indexes.
2004-10-22 Kazu Hirata <kazu@cs.umass.edu>
* alias.c, basic-block.h, cgraphunit.c, combine.c, domwalk.h, * alias.c, basic-block.h, cgraphunit.c, combine.c, domwalk.h,
final.c, gengtype.c, genpreds.c, ggc-page.c, insn-notes.def, final.c, gengtype.c, genpreds.c, ggc-page.c, insn-notes.def,
lambda-code.c, loop-unroll.c, modulo-sched.c, pointer-set.c, lambda-code.c, loop-unroll.c, modulo-sched.c, pointer-set.c,
......
...@@ -3942,7 +3942,7 @@ thread_jumps (void) ...@@ -3942,7 +3942,7 @@ thread_jumps (void)
{ {
basic_block bb; basic_block bb;
bool retval = false; bool retval = false;
int *worklist = xmalloc (sizeof (int) * last_basic_block); basic_block *worklist = xmalloc (sizeof (basic_block) * last_basic_block);
unsigned int size = 0; unsigned int size = 0;
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
...@@ -3951,11 +3951,11 @@ thread_jumps (void) ...@@ -3951,11 +3951,11 @@ thread_jumps (void)
bb->flags &= ~BB_VISITED; bb->flags &= ~BB_VISITED;
} }
/* Initialize WORKLIST by putting the indexes of non-forwarder /* Initialize WORKLIST by putting non-forwarder blocks that
blocks that immediately precede forwarder blocks because those immediately precede forwarder blocks because those are the ones
are the ones that we know we can thread jumps from. We use that we know we can thread jumps from. We use BB_VISITED to
BB_VISITED to indicate that whether a given basic block is in indicate whether a given basic block is in WORKLIST or not,
WORKLIST or not, thereby avoiding duplicates in WORKLIST. */ thereby avoiding duplicates in WORKLIST. */
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
edge_iterator ei; edge_iterator ei;
...@@ -3981,7 +3981,7 @@ thread_jumps (void) ...@@ -3981,7 +3981,7 @@ thread_jumps (void)
&& (e->src->flags & BB_VISITED) == 0) && (e->src->flags & BB_VISITED) == 0)
{ {
e->src->flags |= BB_VISITED; e->src->flags |= BB_VISITED;
worklist[size] = e->src->index; worklist[size] = e->src;
size++; size++;
} }
} }
...@@ -3991,14 +3991,7 @@ thread_jumps (void) ...@@ -3991,14 +3991,7 @@ thread_jumps (void)
while (size > 0) while (size > 0)
{ {
size--; size--;
bb = BASIC_BLOCK (worklist[size]); bb = worklist[size];
/* Check if BB is NULL because BB may have been deleted. This
could happen if BB is originally a non-forwarder block, later
becomes a forwarder block, and it is deleted when a jump is
threaded through it. */
if (!bb)
continue;
/* BB->INDEX is not longer in WORKLIST, so clear BB_VISITED. */ /* BB->INDEX is not longer in WORKLIST, so clear BB_VISITED. */
bb->flags &= ~BB_VISITED; bb->flags &= ~BB_VISITED;
...@@ -4029,7 +4022,7 @@ thread_jumps (void) ...@@ -4029,7 +4022,7 @@ thread_jumps (void)
&& (f->src->flags & BB_VISITED) == 0) && (f->src->flags & BB_VISITED) == 0)
{ {
f->src->flags |= BB_VISITED; f->src->flags |= BB_VISITED;
worklist[size] = f->src->index; worklist[size] = f->src;
size++; size++;
} }
} }
......
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