From 050ecc41f80af0d1719bab230a2afc85f95bb236 Mon Sep 17 00:00:00 2001 From: kazu Date: Wed, 8 Dec 2004 18:52:48 +0000 Subject: [PATCH] * cfgloopmanip.c (create_preheader): Speed up by "unrolling" and simplifying FOR_EACH_EDGE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91913 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/cfgloopmanip.c | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcdc638984b..7972254f6ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-12-08 Kazu Hirata + + * cfgloopmanip.c (create_preheader): Speed up by "unrolling" + and simplifying FOR_EACH_EDGE. + 2004-12-08 Richard Sandiford * config/frv/frv.c (frv_sort_insn_group): Always initialize diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 06fbf701e23..77988c20c2f 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; -- 2.11.4.GIT