aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfganal.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2004-11-08 21:21:49 -0700
committerJeff Law <law@gcc.gnu.org>2004-11-08 21:21:49 -0700
commitdf95526be1b070f6dab3167f362056f4c2c43cfd (patch)
tree06652f7acaf9367a0888955e343219ae2cf9e5d9 /gcc/cfganal.c
parent68e4debe62c4404b0b5fdebf592c2b36bf52949d (diff)
downloadgcc-df95526be1b070f6dab3167f362056f4c2c43cfd.zip
gcc-df95526be1b070f6dab3167f362056f4c2c43cfd.tar.gz
gcc-df95526be1b070f6dab3167f362056f4c2c43cfd.tar.bz2
cfg.c (redirect_edge_succ_nodup): Use find_edge rather than implementing it inline.
* cfg.c (redirect_edge_succ_nodup): Use find_edge rather than implementing it inline. * cfganal.c (find_edge): Search pred->succs or succ->preds, whichever is shorter. From-SVN: r90333
Diffstat (limited to 'gcc/cfganal.c')
-rw-r--r--gcc/cfganal.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 651f153..06c71f6 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -478,9 +478,18 @@ find_edge (basic_block pred, basic_block succ)
edge e;
edge_iterator ei;
- FOR_EACH_EDGE (e, ei, pred->succs)
- if (e->dest == succ)
- return e;
+ if (EDGE_COUNT (pred->succs) <= EDGE_COUNT (succ->preds))
+ {
+ FOR_EACH_EDGE (e, ei, pred->succs)
+ if (e->dest == succ)
+ return e;
+ }
+ else
+ {
+ FOR_EACH_EDGE (e, ei, succ->preds)
+ if (e->src == pred)
+ return e;
+ }
return NULL;
}