Commit 1c570418 by Jan Hubicka Committed by Jan Hubicka

* cfgcleanup.c (try_forward_edges): Allow multiple jump threading.

From-SVN: r48563
parent d83bb9f7
Sat Jan 5 11:52:05 CET 2002 Jan Hubicka <jh@suse.cz>
* cfgcleanup.c (try_forward_edges): Allow multiple jump threading.
2002-01-05 Neil Booth <neil@daikokuya.demon.co.uk> 2002-01-05 Neil Booth <neil@daikokuya.demon.co.uk>
* doc/cppinternals.texi: Update. * doc/cppinternals.texi: Update.
......
...@@ -369,7 +369,8 @@ try_forward_edges (mode, b) ...@@ -369,7 +369,8 @@ try_forward_edges (mode, b)
int mode; int mode;
{ {
bool changed = false; bool changed = false;
edge e, next, threaded_edge; edge e, next, *threaded_edges = NULL;
int nthreaded_edges = 0;
for (e = b->succ; e; e = next) for (e = b->succ; e; e = next)
{ {
...@@ -406,13 +407,17 @@ try_forward_edges (mode, b) ...@@ -406,13 +407,17 @@ try_forward_edges (mode, b)
/* Allow to thread only over one edge at time to simplify updating /* Allow to thread only over one edge at time to simplify updating
of probabilities. */ of probabilities. */
else if ((mode & CLEANUP_THREADING) && !threaded) else if (mode & CLEANUP_THREADING)
{ {
threaded_edge = thread_jump (mode, e, target); edge t = thread_jump (mode, e, target);
if (threaded_edge) if (t)
{ {
new_target = threaded_edge->dest; new_target = t->dest;
new_target_threaded = true; new_target_threaded = true;
if (!nthreaded_edges)
threaded_edges = xmalloc (sizeof (*threaded_edges)
* n_basic_blocks);
threaded_edges[nthreaded_edges++] = t;
} }
} }
...@@ -462,6 +467,7 @@ try_forward_edges (mode, b) ...@@ -462,6 +467,7 @@ try_forward_edges (mode, b)
gcov_type edge_count = e->count; gcov_type edge_count = e->count;
int edge_probability = e->probability; int edge_probability = e->probability;
int edge_frequency; int edge_frequency;
int n = 0;
/* Don't force if target is exit block. */ /* Don't force if target is exit block. */
if (threaded && target != EXIT_BLOCK_PTR) if (threaded && target != EXIT_BLOCK_PTR)
...@@ -498,7 +504,7 @@ try_forward_edges (mode, b) ...@@ -498,7 +504,7 @@ try_forward_edges (mode, b)
first->succ->count -= edge_count; first->succ->count -= edge_count;
first->frequency -= edge_frequency; first->frequency -= edge_frequency;
if (first->succ->succ_next) if (first->succ->succ_next)
t = threaded_edge; t = threaded_edges [n++];
else else
t = first->succ; t = first->succ;
...@@ -510,6 +516,8 @@ try_forward_edges (mode, b) ...@@ -510,6 +516,8 @@ try_forward_edges (mode, b)
} }
} }
if (threaded_edges)
free (threaded_edges);
return changed; return changed;
} }
......
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