From: Trevor Saunders <tbsaunde+...@tbsaunde.org> gcc/ChangeLog:
2016-11-14 Trevor Saunders <tbsaunde+...@tbsaunde.org> * cse.c (count_reg_usage): Adjust. * rtl.h: Adjust prototypes. * rtlanal.c (find_reg_equal_equiv_note): Change argument type to rtx_insn *. --- gcc/cse.c | 63 +++++++++++++++++++++++++++++++---------------------------- gcc/rtl.h | 2 +- gcc/rtlanal.c | 2 +- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/gcc/cse.c b/gcc/cse.c index 11b8fbe..a2d8b4f 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -6824,37 +6824,40 @@ count_reg_usage (rtx x, int *counts, rtx dest, int incr) case CALL_INSN: case INSN: case JUMP_INSN: - /* We expect dest to be NULL_RTX here. If the insn may throw, - or if it cannot be deleted due to side-effects, mark this fact - by setting DEST to pc_rtx. */ - if ((!cfun->can_delete_dead_exceptions && !insn_nothrow_p (x)) - || side_effects_p (PATTERN (x))) - dest = pc_rtx; - if (code == CALL_INSN) - count_reg_usage (CALL_INSN_FUNCTION_USAGE (x), counts, dest, incr); - count_reg_usage (PATTERN (x), counts, dest, incr); - - /* Things used in a REG_EQUAL note aren't dead since loop may try to - use them. */ - - note = find_reg_equal_equiv_note (x); - if (note) - { - rtx eqv = XEXP (note, 0); + { + rtx_insn *insn = as_a<rtx_insn *> (x); + /* We expect dest to be NULL_RTX here. If the insn may throw, + or if it cannot be deleted due to side-effects, mark this fact + by setting DEST to pc_rtx. */ + if ((!cfun->can_delete_dead_exceptions && !insn_nothrow_p (x)) + || side_effects_p (PATTERN (x))) + dest = pc_rtx; + if (code == CALL_INSN) + count_reg_usage (CALL_INSN_FUNCTION_USAGE (x), counts, dest, incr); + count_reg_usage (PATTERN (x), counts, dest, incr); + + /* Things used in a REG_EQUAL note aren't dead since loop may try to + use them. */ + + note = find_reg_equal_equiv_note (insn); + if (note) + { + rtx eqv = XEXP (note, 0); - if (GET_CODE (eqv) == EXPR_LIST) - /* This REG_EQUAL note describes the result of a function call. - Process all the arguments. */ - do - { - count_reg_usage (XEXP (eqv, 0), counts, dest, incr); - eqv = XEXP (eqv, 1); - } - while (eqv && GET_CODE (eqv) == EXPR_LIST); - else - count_reg_usage (eqv, counts, dest, incr); - } - return; + if (GET_CODE (eqv) == EXPR_LIST) + /* This REG_EQUAL note describes the result of a function call. + Process all the arguments. */ + do + { + count_reg_usage (XEXP (eqv, 0), counts, dest, incr); + eqv = XEXP (eqv, 1); + } + while (eqv && GET_CODE (eqv) == EXPR_LIST); + else + count_reg_usage (eqv, counts, dest, incr); + } + return; + } case EXPR_LIST: if (REG_NOTE_KIND (x) == REG_EQUAL diff --git a/gcc/rtl.h b/gcc/rtl.h index 7a44e3b..dc308f2 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -3011,7 +3011,7 @@ extern int dead_or_set_p (const_rtx, const_rtx); extern int dead_or_set_regno_p (const_rtx, unsigned int); extern rtx find_reg_note (const_rtx, enum reg_note, const_rtx); extern rtx find_regno_note (const_rtx, enum reg_note, unsigned int); -extern rtx find_reg_equal_equiv_note (const_rtx); +extern rtx find_reg_equal_equiv_note (const rtx_insn *); extern rtx find_constant_src (const rtx_insn *); extern int find_reg_fusage (const_rtx, enum rtx_code, const_rtx); extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int); diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 4617e8e..7a89c03 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -2113,7 +2113,7 @@ find_regno_note (const_rtx insn, enum reg_note kind, unsigned int regno) has such a note. */ rtx -find_reg_equal_equiv_note (const_rtx insn) +find_reg_equal_equiv_note (const rtx_insn *insn) { rtx link; -- 2.9.3.dirty