/* The tracer pass for the GNU compiler.
Contributed by Jan Hubicka, SuSE Labs.
- Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
/* This pass performs the tail duplication needed for superblock formation.
For more information see:
/* Return true if BB has been seen - it is connected to some trace
already. */
-#define seen(bb) (bb->rbi->visited || bb->rbi->next)
+#define seen(bb) (bb->il.rtl->visited || bb->aux)
/* Return true if we should ignore the basic block for purposes of tracing. */
static bool
&& can_duplicate_block_p (bb2))
{
edge e;
- edge_iterator ei;
basic_block old = bb2;
- FOR_EACH_EDGE (e, ei, bb2->preds)
- if (e->src == bb)
- break;
+ e = find_edge (bb, bb2);
nduplicated += counts [bb2->index];
bb2 = duplicate_block (bb2, e);
fprintf (dump_file, "Duplicated %i as %i [%i]\n",
old->index, bb2->index, bb2->frequency);
}
- bb->rbi->next = bb2;
- bb2->rbi->visited = 1;
+ bb->aux = bb2;
+ bb2->il.rtl->visited = 1;
bb = bb2;
/* In case the trace became infrequent, stop duplicating. */
if (ignore_bb_p (bb))
static void
layout_superblocks (void)
{
- basic_block end = EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest;
- basic_block bb = EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest->next_bb;
+ basic_block end = single_succ (ENTRY_BLOCK_PTR);
+ basic_block bb = end->next_bb;
while (bb != EXIT_BLOCK_PTR)
{
edge_iterator ei;
edge e, best = NULL;
- while (end->rbi->next)
- end = end->rbi->next;
+ while (end->aux)
+ end = end->aux;
FOR_EACH_EDGE (e, ei, end->succs)
if (e->dest != EXIT_BLOCK_PTR
- && e->dest != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest
- && !e->dest->rbi->visited
+ && e->dest != single_succ (ENTRY_BLOCK_PTR)
+ && !e->dest->il.rtl->visited
&& (!best || EDGE_FREQUENCY (e) > EDGE_FREQUENCY (best)))
best = e;
if (best)
{
- end->rbi->next = best->dest;
- best->dest->rbi->visited = 1;
+ end->aux = best->dest;
+ best->dest->il.rtl->visited = 1;
}
else
for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
{
- if (!bb->rbi->visited)
+ if (!bb->il.rtl->visited)
{
- end->rbi->next = bb;
- bb->rbi->visited = 1;
+ end->aux = bb;
+ bb->il.rtl->visited = 1;
break;
}
}