Commit 1ad72cef by Bernd Schmidt Committed by Bernd Schmidt

Fix gen_nop_type abort

From-SVN: r44647
parent 703cf211
...@@ -12,6 +12,9 @@ ...@@ -12,6 +12,9 @@
(do_spill, do_restore): Use it to add REG_INC note. (do_spill, do_restore): Use it to add REG_INC note.
* config/ia64/ia64.md (movti_internal): Add REG_INC notes as needed. * config/ia64/ia64.md (movti_internal): Add REG_INC notes as needed.
* config/ia64/ia64.c (ia64_sched_reorder): Defer scheduling of
asms if other insns are available.
2001-08-04 Hans-Peter Nilsson <hp@bitrange.com> 2001-08-04 Hans-Peter Nilsson <hp@bitrange.com>
* config/sh/sh.c (sh_asm_named_section): Fix typo in align * config/sh/sh.c (sh_asm_named_section): Fix typo in align
......
...@@ -5982,10 +5982,10 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, ...@@ -5982,10 +5982,10 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready,
int *pn_ready; int *pn_ready;
int reorder_type, clock_var; int reorder_type, clock_var;
{ {
int n_asms;
int n_ready = *pn_ready; int n_ready = *pn_ready;
rtx *e_ready = ready + n_ready; rtx *e_ready = ready + n_ready;
rtx *insnp; rtx *insnp;
rtx highest;
if (sched_verbose) if (sched_verbose)
{ {
...@@ -6029,7 +6029,7 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, ...@@ -6029,7 +6029,7 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready,
maybe_rotate (sched_verbose ? dump : NULL); maybe_rotate (sched_verbose ? dump : NULL);
/* First, move all USEs, CLOBBERs and other crud out of the way. */ /* First, move all USEs, CLOBBERs and other crud out of the way. */
highest = ready[n_ready - 1]; n_asms = 0;
for (insnp = ready; insnp < e_ready; insnp++) for (insnp = ready; insnp < e_ready; insnp++)
if (insnp < e_ready) if (insnp < e_ready)
{ {
...@@ -6037,7 +6037,17 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, ...@@ -6037,7 +6037,17 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready,
enum attr_type t = ia64_safe_type (insn); enum attr_type t = ia64_safe_type (insn);
if (t == TYPE_UNKNOWN) if (t == TYPE_UNKNOWN)
{ {
highest = ready[n_ready - 1]; if (GET_CODE (PATTERN (insn)) == ASM_INPUT
|| asm_noperands (PATTERN (insn)) >= 0)
{
rtx lowest = ready[0];
ready[0] = insn;
*insnp = lowest;
n_asms++;
}
else
{
rtx highest = ready[n_ready - 1];
ready[n_ready - 1] = insn; ready[n_ready - 1] = insn;
*insnp = highest; *insnp = highest;
if (ia64_final_schedule && group_barrier_needed_p (insn)) if (ia64_final_schedule && group_barrier_needed_p (insn))
...@@ -6046,15 +6056,23 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready, ...@@ -6046,15 +6056,23 @@ ia64_sched_reorder (dump, sched_verbose, ready, pn_ready,
sched_data.last_was_stop = 1; sched_data.last_was_stop = 1;
maybe_rotate (sched_verbose ? dump : NULL); maybe_rotate (sched_verbose ? dump : NULL);
} }
else if (GET_CODE (PATTERN (insn)) == ASM_INPUT
|| asm_noperands (PATTERN (insn)) >= 0) return 1;
}
}
}
if (n_asms < n_ready)
{ {
/* It must be an asm of some kind. */ /* Some normal insns to process. Skip the asms. */
cycle_end_fill_slots (sched_verbose ? dump : NULL); ready += n_asms;
n_ready -= n_asms;
} }
else if (n_ready > 0)
{
/* Only asm insns left. */
cycle_end_fill_slots (sched_verbose ? dump : NULL);
return 1; return 1;
} }
}
if (ia64_final_schedule) if (ia64_final_schedule)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment