Basic block duplication
mcrosier@ncsu.edu
mcrosier@ncsu.edu
Wed Oct 12 14:40:00 GMT 2005
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
More information about the Gcc
mailing list