diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-12-08 18:52:48 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-12-08 18:52:48 +0000 |
commit | b057216dba84bd26eeb749d876fde5b871e01e15 (patch) | |
tree | 4e16e8f3757b241aca3fb4449f18006ee08624a5 /gcc | |
parent | d63a0e228c533fe4ab3b78007d43b3c6bf6a83d1 (diff) | |
download | gcc-b057216dba84bd26eeb749d876fde5b871e01e15.zip gcc-b057216dba84bd26eeb749d876fde5b871e01e15.tar.gz gcc-b057216dba84bd26eeb749d876fde5b871e01e15.tar.bz2 |
cfgloopmanip.c (create_preheader): Speed up by "unrolling" and simplifying FOR_EACH_EDGE.
* cfgloopmanip.c (create_preheader): Speed up by "unrolling"
and simplifying FOR_EACH_EDGE.
From-SVN: r91913
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cfgloopmanip.c | 14 |
2 files changed, 13 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcdc638..7972254 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-12-08 Kazu Hirata <kazu@cs.umass.edu> + + * cfgloopmanip.c (create_preheader): Speed up by "unrolling" + and simplifying FOR_EACH_EDGE. + 2004-12-08 Richard Sandiford <rsandifo@redhat.com> * config/frv/frv.c (frv_sort_insn_group): Always initialize diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 06fbf70..77988c2 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -1156,9 +1156,10 @@ create_preheader (struct loop *loop, int flags) gcc_assert (nentry); if (nentry == 1) { - FOR_EACH_EDGE (e, ei, loop->header->preds) - if (e->src != loop->latch) - break; + /* Get an edge that is different from the one from loop->latch + to loop->header. */ + e = EDGE_PRED (loop->header, + EDGE_PRED (loop->header, 0)->src == loop->latch); if (!(flags & CP_SIMPLE_PREHEADERS) || EDGE_COUNT (e->src->succs) == 1) return NULL; @@ -1178,9 +1179,10 @@ create_preheader (struct loop *loop, int flags) /* Reorganize blocks so that the preheader is not stuck in the middle of the loop. */ - FOR_EACH_EDGE (e, ei, dummy->preds) - if (e->src != loop->latch) - break; + + /* Get an edge that is different from the one from loop->latch to + dummy. */ + e = EDGE_PRED (dummy, EDGE_PRED (dummy, 0)->src == loop->latch); move_block_after (dummy, e->src); loop->header->loop_father = loop; |