Commit e2c879a1 by Kazu Hirata Committed by Kazu Hirata

cfg.c (cached_make_edge): Call make_edge if edge cache is not available.

	* cfg.c (cached_make_edge): Call make_edge if edge cache is
	not available.  Use tail calls wherever possible.
	(make_edge): Call unchecked_make_edge to create an edge.

From-SVN: r95396
parent 554beb3a
2005-02-22 Kazu Hirata <kazu@cs.umass.edu>
* cfg.c (cached_make_edge): Call make_edge if edge cache is
not available. Use tail calls wherever possible.
(make_edge): Call unchecked_make_edge to create an edge.
2005-02-22 Diego Novillo <dnovillo@redhat.com> 2005-02-22 Diego Novillo <dnovillo@redhat.com>
* tree-into-ssa.c (rewrite_blocks): Move debug dumps from ... * tree-into-ssa.c (rewrite_blocks): Move debug dumps from ...
......
...@@ -273,43 +273,29 @@ unchecked_make_edge (basic_block src, basic_block dst, int flags) ...@@ -273,43 +273,29 @@ unchecked_make_edge (basic_block src, basic_block dst, int flags)
edge edge
cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int flags) cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int flags)
{ {
int use_edge_cache; if (edge_cache == NULL
edge e; || src == ENTRY_BLOCK_PTR
|| dst == EXIT_BLOCK_PTR)
/* Don't bother with edge cache for ENTRY or EXIT, if there aren't that return make_edge (src, dst, flags);
many edges to them, or we didn't allocate memory for it. */
use_edge_cache = (edge_cache
&& src != ENTRY_BLOCK_PTR && dst != EXIT_BLOCK_PTR);
/* Make sure we don't add duplicate edges. */ /* Does the requested edge already exist? */
switch (use_edge_cache)
{
default:
/* Quick test for non-existence of the edge. */
if (! TEST_BIT (edge_cache[src->index], dst->index)) if (! TEST_BIT (edge_cache[src->index], dst->index))
break; {
/* The edge does not exist. Create one and update the
/* The edge exists; early exit if no work to do. */ cache. */
if (flags == 0) SET_BIT (edge_cache[src->index], dst->index);
return NULL; return unchecked_make_edge (src, dst, flags);
}
/* Fall through. */ /* At this point, we know that the requested edge exists. Adjust
case 0: flags if necessary. */
e = find_edge (src, dst); if (flags)
if (e)
{ {
edge e = find_edge (src, dst);
e->flags |= flags; e->flags |= flags;
return NULL;
}
break;
} }
e = unchecked_make_edge (src, dst, flags); return NULL;
if (use_edge_cache)
SET_BIT (edge_cache[src->index], dst->index);
return e;
} }
/* Create an edge connecting SRC and DEST with flags FLAGS. Return newly /* Create an edge connecting SRC and DEST with flags FLAGS. Return newly
...@@ -318,7 +304,16 @@ cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int fla ...@@ -318,7 +304,16 @@ cached_make_edge (sbitmap *edge_cache, basic_block src, basic_block dst, int fla
edge edge
make_edge (basic_block src, basic_block dest, int flags) make_edge (basic_block src, basic_block dest, int flags)
{ {
return cached_make_edge (NULL, src, dest, flags); edge e = find_edge (src, dest);
/* Make sure we don't add duplicate edges. */
if (e)
{
e->flags |= flags;
return NULL;
}
return unchecked_make_edge (src, dest, flags);
} }
/* Create an edge connecting SRC to DEST and set probability by knowing /* Create an edge connecting SRC to DEST and set probability by knowing
......
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