From f489aff87aa4c15ffe681cfcaede591c533b331e Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 12 Sep 2005 03:51:13 +0000 Subject: [PATCH] rs6000.c (get_next_active_insn): Rewrite using CALL_P... * 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. From-SVN: r104159 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/rs6000.c | 32 ++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2501c1a7aec..41d85c2edd3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-12 Alan Modra + + * 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 PR rtl-optimization/23098 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 44548133e91..d1be9b26fcc 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 -- 2.30.2