This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]