+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
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