From 05549c9604478e34987a41237d67261c42081c0a Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Sat, 25 Nov 2006 10:53:06 +0000 Subject: jump.c (mark_all_labels): Work in cfglayout mode. * jump.c (mark_all_labels): Work in cfglayout mode. * cfgcleanup.c (cleanup_cfg): Do not call delete_dead_jumptables when in cfglayout mode, because there are no dead jumptables visible. * cfgrtl.c (commit_one_edge_insertion): Don't set bb->aux when in cfglayout mode. (commit_edge_insertions): Do not allow insertion of instructions with control flow insns when in cfglayout mode. From-SVN: r119191 --- gcc/jump.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'gcc/jump.c') diff --git a/gcc/jump.c b/gcc/jump.c index f42ee5a43ab..127e8a800c3 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -202,6 +202,31 @@ mark_all_labels (rtx f) } } } + + /* If we are in cfglayout mode, there may be non-insns between the + basic blocks. If those non-insns represent tablejump data, they + contain label references that we must record. */ + if (current_ir_type () == IR_RTL_CFGLAYOUT) + { + basic_block bb; + rtx insn; + FOR_EACH_BB (bb) + { + for (insn = bb->il.rtl->header; insn; insn = NEXT_INSN (insn)) + if (INSN_P (insn)) + { + gcc_assert (JUMP_TABLE_DATA_P (insn)); + mark_jump_label (PATTERN (insn), insn, 0); + } + + for (insn = bb->il.rtl->footer; insn; insn = NEXT_INSN (insn)) + if (INSN_P (insn)) + { + gcc_assert (JUMP_TABLE_DATA_P (insn)); + mark_jump_label (PATTERN (insn), insn, 0); + } + } + } } /* Move all block-beg, block-end and loop-beg notes between START and END out -- cgit v1.2.1