This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Basic block duplication
- From: mcrosier at ncsu dot edu
- To: gcc at gcc dot gnu dot org
- Date: Wed, 12 Oct 2005 10:38:50 -0400 (EDT)
- Subject: Basic block duplication
During the instruction scheduling pass (before reload) I'm interested in
doing some basic block duplication. Specifically, I'm working in the
sched-rgn.c code. I've looked through the tracer.c and bb-reorder.c code,
but I'm missing something! To begin testing I just made the reorder chain
the same as the original chain:
-----
unsigned int liveness_flags;
liveness_flags = (!HAVE_conditional_execution ? CLEANUP_UPDATE_LIFE : 0);
cfg_layout_initialize (liveness_flags);
/* Build the reorder chain from the original order of blocks */
FOR_EACH_BB (bb)
if(bb->next_bb != EXIT_BLOCK_PTR)
bb->rbi->next = bb->next_bb;
cfg_layout_finalize ();
cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
-----
For very small procedures (3-5 basic blocks) I don't have a problem, but
for larger (> 5 basic block) procedures I go boom. Can someone please
shed some light on my error? I'm thinking it has something to do with
block reordering and liveness info?
Thanks,
Chad