diff options
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r-- | gcc/cselib.c | 41 |
1 files changed, 10 insertions, 31 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c index 36f649d..500793b 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -55,8 +55,7 @@ static unsigned int cselib_hash_rtx (rtx, int, machine_mode); static cselib_val *new_cselib_val (unsigned int, machine_mode, rtx); static void add_mem_for_addr (cselib_val *, cselib_val *, rtx); static cselib_val *cselib_lookup_mem (rtx, int); -static void cselib_invalidate_regno (unsigned int, machine_mode, - const_rtx = NULL); +static void cselib_invalidate_regno (unsigned int, machine_mode); static void cselib_invalidate_mem (rtx); static void cselib_record_set (rtx, cselib_val *, cselib_val *); static void cselib_record_sets (rtx_insn *); @@ -1663,7 +1662,6 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd, /* SCRATCH must be shared because they represent distinct values. */ return orig; case CLOBBER: - case CLOBBER_HIGH: if (REG_P (XEXP (orig, 0)) && HARD_REGISTER_NUM_P (REGNO (XEXP (orig, 0)))) return orig; break; @@ -2166,8 +2164,7 @@ cselib_lookup (rtx x, machine_mode mode, invalidating call clobbered registers across a call. */ static void -cselib_invalidate_regno (unsigned int regno, machine_mode mode, - const_rtx setter) +cselib_invalidate_regno (unsigned int regno, machine_mode mode) { unsigned int endregno; unsigned int i; @@ -2190,9 +2187,6 @@ cselib_invalidate_regno (unsigned int regno, machine_mode mode, i = regno - max_value_regs; endregno = end_hard_regno (mode, regno); - - if (setter && GET_CODE (setter) == CLOBBER_HIGH) - gcc_assert (endregno == regno + 1); } else { @@ -2225,19 +2219,6 @@ cselib_invalidate_regno (unsigned int regno, machine_mode mode, continue; } - /* Ignore if clobber high and the register isn't clobbered. */ - if (setter && GET_CODE (setter) == CLOBBER_HIGH) - { - gcc_assert (endregno == regno + 1); - const_rtx x = XEXP (setter, 0); - if (!reg_is_clobbered_by_clobber_high (i, GET_MODE (v->val_rtx), - x)) - { - l = &(*l)->next; - continue; - } - } - /* We have an overlap. */ if (*l == REG_VALUES (i)) { @@ -2372,10 +2353,10 @@ cselib_invalidate_mem (rtx mem_rtx) *vp = &dummy_val; } -/* Invalidate DEST, which is being assigned to or clobbered by SETTER. */ +/* Invalidate DEST. */ void -cselib_invalidate_rtx (rtx dest, const_rtx setter) +cselib_invalidate_rtx (rtx dest) { while (GET_CODE (dest) == SUBREG || GET_CODE (dest) == ZERO_EXTRACT @@ -2383,7 +2364,7 @@ cselib_invalidate_rtx (rtx dest, const_rtx setter) dest = XEXP (dest, 0); if (REG_P (dest)) - cselib_invalidate_regno (REGNO (dest), GET_MODE (dest), setter); + cselib_invalidate_regno (REGNO (dest), GET_MODE (dest)); else if (MEM_P (dest)) cselib_invalidate_mem (dest); } @@ -2391,10 +2372,10 @@ cselib_invalidate_rtx (rtx dest, const_rtx setter) /* A wrapper for cselib_invalidate_rtx to be called via note_stores. */ static void -cselib_invalidate_rtx_note_stores (rtx dest, const_rtx setter, +cselib_invalidate_rtx_note_stores (rtx dest, const_rtx, void *data ATTRIBUTE_UNUSED) { - cselib_invalidate_rtx (dest, setter); + cselib_invalidate_rtx (dest); } /* Record the result of a SET instruction. DEST is being set; the source @@ -2809,11 +2790,9 @@ cselib_process_insn (rtx_insn *insn) if (CALL_P (insn)) { for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1)) - { - gcc_assert (GET_CODE (XEXP (x, 0)) != CLOBBER_HIGH); - if (GET_CODE (XEXP (x, 0)) == CLOBBER) - cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0)); - } + if (GET_CODE (XEXP (x, 0)) == CLOBBER) + cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0)); + /* Flush everything on setjmp. */ if (cselib_preserve_constants && find_reg_note (insn, REG_SETJMP, NULL)) |