diff options
author | Alan Modra <amodra@bigpond.net.au> | 2005-09-12 03:51:13 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2005-09-12 13:21:13 +0930 |
commit | f489aff87aa4c15ffe681cfcaede591c533b331e (patch) | |
tree | b7f7281e821f49bc4045a940b9bcef4bd44dc7b7 | |
parent | e7126cc571415e12a0ac855fb48c5d720b5e86e3 (diff) | |
download | gcc-f489aff87aa4c15ffe681cfcaede591c533b331e.zip gcc-f489aff87aa4c15ffe681cfcaede591c533b331e.tar.gz gcc-f489aff87aa4c15ffe681cfcaede591c533b331e.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 32 |
2 files changed, 22 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2501c1a..41d85c2 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 4454813..d1be9b2 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 |