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