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