diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2501c1a7aeccc2582f230fd475037b670ff46045..41d85c2edd3e3eb768898772523afc7ae9cd3682 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-12 Alan Modra <amodra@bigpond.net.au> + + * config/rs6000/rs6000.c (get_next_active_insn): Rewrite using + CALL_P, JUMP_P and NONJUMP_INSN_P, so that barriers and labels + are omitted. Exclude stack_tie insn too. + 2005-09-11 David Edelsohn <edelsohn@gnu.org> PR rtl-optimization/23098 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 44548133e91ff88c8410df74005b02c0c5d2a7bb..d1be9b26fccd21fa2e978ebb187d8a66d5010742 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16632,26 +16632,26 @@ rs6000_is_costly_dependence (rtx insn, rtx next, rtx link, int cost, static rtx get_next_active_insn (rtx insn, rtx tail) { - rtx next_insn; - - if (!insn || insn == tail) + if (insn == NULL_RTX || insn == tail) return NULL_RTX; - next_insn = NEXT_INSN (insn); - - while (next_insn - && next_insn != tail - && (GET_CODE (next_insn) == NOTE - || GET_CODE (PATTERN (next_insn)) == USE - || GET_CODE (PATTERN (next_insn)) == CLOBBER)) + while (1) { - next_insn = NEXT_INSN (next_insn); - } - - if (!next_insn || next_insn == tail) - return NULL_RTX; + insn = NEXT_INSN (insn); + if (insn == NULL_RTX || insn == tail) + return NULL_RTX; - return next_insn; + if (CALL_P (insn) + || JUMP_P (insn) + || (NONJUMP_INSN_P (insn) + && GET_CODE (PATTERN (insn)) != USE + && GET_CODE (PATTERN (insn)) != CLOBBER + && !(GET_CODE (PATTERN (insn)) == SET + && GET_CODE (XEXP (PATTERN (insn), 1)) == UNSPEC + && XINT (XEXP (PATTERN (insn), 1), 1) == UNSPEC_TIE))) + break; + } + return insn; } /* Return whether the presence of INSN causes a dispatch group termination