diff options
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 7d6b5ddce4e..b8c3bfabbfb 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -1490,7 +1490,7 @@ calculate_needs_all_insns (int global) include REG_LABEL_OPERAND and REG_LABEL_TARGET), we need to see what effects this has on the known offsets at labels. */ - if (LABEL_P (insn) || JUMP_P (insn) + if (LABEL_P (insn) || JUMP_P (insn) || JUMP_TABLE_DATA_P (insn) || (INSN_P (insn) && REG_NOTES (insn) != 0)) set_label_offsets (insn, insn, 0); @@ -1620,7 +1620,7 @@ calculate_elim_costs_all_insns (void) include REG_LABEL_OPERAND and REG_LABEL_TARGET), we need to see what effects this has on the known offsets at labels. */ - if (LABEL_P (insn) || JUMP_P (insn) + if (LABEL_P (insn) || JUMP_P (insn) || JUMP_TABLE_DATA_P (insn) || (INSN_P (insn) && REG_NOTES (insn) != 0)) set_label_offsets (insn, insn, 0); @@ -2404,6 +2404,10 @@ set_label_offsets (rtx x, rtx insn, int initial_p) return; + case JUMP_TABLE_DATA: + set_label_offsets (PATTERN (insn), insn, initial_p); + return; + case JUMP_INSN: set_label_offsets (PATTERN (insn), insn, initial_p); @@ -3234,11 +3238,10 @@ eliminate_regs_in_insn (rtx insn, int replace) if (! insn_is_asm && icode < 0) { - gcc_assert (JUMP_TABLE_DATA_P (insn) + gcc_assert (DEBUG_INSN_P (insn) || GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER - || GET_CODE (PATTERN (insn)) == ASM_INPUT - || DEBUG_INSN_P (insn)); + || GET_CODE (PATTERN (insn)) == ASM_INPUT); if (DEBUG_INSN_P (insn)) INSN_VAR_LOCATION_LOC (insn) = eliminate_regs (INSN_VAR_LOCATION_LOC (insn), VOIDmode, insn); @@ -3644,11 +3647,10 @@ elimination_costs_in_insn (rtx insn) if (! insn_is_asm && icode < 0) { - gcc_assert (JUMP_TABLE_DATA_P (insn) + gcc_assert (DEBUG_INSN_P (insn) || GET_CODE (PATTERN (insn)) == USE || GET_CODE (PATTERN (insn)) == CLOBBER - || GET_CODE (PATTERN (insn)) == ASM_INPUT - || DEBUG_INSN_P (insn)); + || GET_CODE (PATTERN (insn)) == ASM_INPUT); return; } @@ -8866,8 +8868,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) since if they are the only uses, they are dead. */ if (set != 0 && SET_DEST (set) == reg) continue; - if (LABEL_P (i2) - || JUMP_P (i2)) + if (LABEL_P (i2) || JUMP_P (i2)) break; if ((NONJUMP_INSN_P (i2) || CALL_P (i2)) && reg_mentioned_p (reg, PATTERN (i2))) @@ -8891,8 +8892,7 @@ delete_output_reload (rtx insn, int j, int last_reload_reg, rtx new_reload_reg) delete_address_reloads (i2, insn); delete_insn (i2); } - if (LABEL_P (i2) - || JUMP_P (i2)) + if (LABEL_P (i2) || JUMP_P (i2)) break; } |