This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Deleting jump tables and CFG
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Cc: hubicka at ucw dot cz, gcc at gcc dot gnu dot org
- Date: Mon, 1 Dec 2003 18:11:21 +0100
- Subject: Re: Deleting jump tables and CFG
- References: <10312011651.AA27137@vlsi1.ultra.nyu.edu>
> Unfrortuantely it is not easy to track and delete all references to
> the dead jumptable immediately when it becomes unreachable or
> simplifies to simplejump as there can be code computing the jumptable
> destination. Thus the strategy is to remove the jumptables after
> liveness analysis via purge_dead_jumptables call. This is causing
> problems all the time. It would be nice to move the jumptables out of
> the instruction chain (as rest of datas are dealt with) so the dead
> jumptables won't affect other optimizations.
>
> The problem is that code to delete unreachable blocks is deleting the labels
> referenced by a jumptable but not the table itself. So when jump.c runs, it
> blows up since the CODE_LABELs have been GC'ed.
Do you have some testcase to look at?
This looks like quite nasty problem. Perhaps we can manage
delete_unreachable_blocks to turn affected CODE_LABELs into
NOTE_INSN_DEAD_LABEL instead of deleting them, but it is not completely
trivial to track down what labels are accessed via jumptables and we
don't have any machinery to delete those notes, so we should not create
too many of these...
Honza