+Fri Nov 5 12:04:02 1999 Richard Henderson <rth@cygnus.com>
+
+ * haifa-sched.c (schedule_block): Don't crash if there's no
+ next insn for an interblock movement.
+ (add_branch_dependences): Don't allow clobber insns to move either.
+
Fri Nov 5 10:18:11 1999 Richard Henderson <rth@cygnus.com>
* i386.c (split_xf): New.
|| (insn_issue_delay (insn) <= 3
&& check_live (insn, bb_src)
&& is_exception_free (insn, bb_src, target_bb))))
-
{
rtx next;
speculative insn, NEXT might otherwise be a note. */
next = next_nonnote_insn (insn);
if (INSN_DEP_COUNT (insn) == 0
- && (SCHED_GROUP_P (next) == 0
+ && (! next
+ || SCHED_GROUP_P (next) == 0
|| GET_RTX_CLASS (GET_CODE (next)) != 'i'))
ready[n_ready++] = insn;
}
rtx insn, last;
- /* For all branches, calls, uses, and cc0 setters, force them to remain
- in order at the end of the block by adding dependencies and giving
- the last a high priority. There may be notes present, and prev_head
- may also be a note.
+ /* For all branches, calls, uses, clobbers, and cc0 setters, force them
+ to remain in order at the end of the block by adding dependencies and
+ giving the last a high priority. There may be notes present, and
+ prev_head may also be a note.
Branches must obviously remain at the end. Calls should remain at the
end since moving them results in worse register allocation. Uses remain
at the end because they can't be moved away from their cc0 user. */
insn = tail;
last = 0;
- while (GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN
+ while (GET_CODE (insn) == CALL_INSN
+ || GET_CODE (insn) == JUMP_INSN
|| (GET_CODE (insn) == INSN
&& (GET_CODE (PATTERN (insn)) == USE
+ || GET_CODE (PATTERN (insn)) == CLOBBER
#ifdef HAVE_cc0
|| sets_cc0_p (PATTERN (insn))
#endif