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