aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2005-09-12 03:51:13 +0000
committerAlan Modra <amodra@gcc.gnu.org>2005-09-12 13:21:13 +0930
commitf489aff87aa4c15ffe681cfcaede591c533b331e (patch)
treeb7f7281e821f49bc4045a940b9bcef4bd44dc7b7
parente7126cc571415e12a0ac855fb48c5d720b5e86e3 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c32
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