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]

Question about cfgrtl.c:flow_delete_block_noexpunge


This code:

  /* Include any jump table following the basic block.  */
  end = b->end;
  if (tablejump_p (end, NULL, &tmp))
    end = tmp;

makes no sense to me.

Why is the jump table right after the basic block?  Isn't it in a basic
block of its own?

I see this failing in GCC 3.2 in a very large Ada testcase where what
happens is that CSE converts a tablejump into an unconditional jump.
It leaves the tablejump for later passes to clean up and that's when
this blows up.  I see the jump table itself as being in its own basic
block and having moved considerably from where it used to be.

It works much better for me without this code.

Does anybody know the rationale behind this code?


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