Mercurial > hg > CbC > CbC_gcc
diff gcc/jump.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/jump.c Fri Oct 27 22:46:09 2017 +0900 +++ b/gcc/jump.c Thu Oct 25 07:37:49 2018 +0900 @@ -1,5 +1,5 @@ /* Optimize jump instructions, for GNU compiler. - Copyright (C) 1987-2017 Free Software Foundation, Inc. + Copyright (C) 1987-2018 Free Software Foundation, Inc. This file is part of GCC. @@ -123,21 +123,10 @@ { if (BARRIER_P (insn)) { - rtx_insn *prev = prev_nonnote_insn (insn); + rtx_insn *prev = prev_nonnote_nondebug_insn (insn); if (!prev) continue; - if (CALL_P (prev)) - { - /* Make sure we do not split a call and its corresponding - CALL_ARG_LOCATION note. */ - rtx_insn *next = NEXT_INSN (prev); - - if (NOTE_P (next) - && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) - prev = next; - } - if (BARRIER_P (prev)) delete_insn (insn); else if (prev != PREV_INSN (insn)) @@ -1105,6 +1094,7 @@ case CC0: case REG: case CLOBBER: + case CLOBBER_HIGH: case CALL: return; @@ -1279,26 +1269,6 @@ if (next != 0 && BARRIER_P (next)) delete_insn (next); - /* If this is a call, then we have to remove the var tracking note - for the call arguments. */ - - if (CALL_P (insn) - || (NONJUMP_INSN_P (insn) - && GET_CODE (PATTERN (insn)) == SEQUENCE - && CALL_P (XVECEXP (PATTERN (insn), 0, 0)))) - { - rtx_insn *p; - - for (p = next && next->deleted () ? NEXT_INSN (next) : next; - p && NOTE_P (p); - p = NEXT_INSN (p)) - if (NOTE_KIND (p) == NOTE_INSN_CALL_ARG_LOCATION) - { - remove_insn (p); - break; - } - } - /* If deleting a jump, decrement the count of the label, and delete the label if it is now unused. */ @@ -1724,7 +1694,7 @@ && REG_P (SUBREG_REG (y))))) { int reg_x = -1, reg_y = -1; - int byte_x = 0, byte_y = 0; + poly_int64 byte_x = 0, byte_y = 0; struct subreg_info info; if (GET_MODE (x) != GET_MODE (y)) @@ -1781,7 +1751,7 @@ reg_y = reg_renumber[reg_y]; } - return reg_x >= 0 && reg_x == reg_y && byte_x == byte_y; + return reg_x >= 0 && reg_x == reg_y && known_eq (byte_x, byte_y); } /* Now we have disposed of all the cases @@ -1873,6 +1843,11 @@ } break; + case 'p': + if (maybe_ne (SUBREG_BYTE (x), SUBREG_BYTE (y))) + return 0; + break; + case 't': if (XTREE (x, i) != XTREE (y, i)) return 0;