Question about cfgrtl.c:flow_delete_block_noexpunge

Richard Kenner kenner@vlsi1.ultra.nyu.edu
Tue Jun 10 22:58:00 GMT 2003


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?



More information about the Gcc mailing list