This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Question about cfgrtl.c:flow_delete_block_noexpunge
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: gcc at gcc dot gnu dot org
- Date: Tue, 10 Jun 03 18:59:01 EDT
- Subject: 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?