===================================================================
@@ -3959,6 +3959,7 @@ prune_ready_list (state_t temp_state, bo
bool shadows_only_p, bool modulo_epilogue_p)
{
int i;
+ bool sched_group_found = false;
restart:
for (i = 0; i < ready.n_ready; i++)
@@ -3967,13 +3968,27 @@ prune_ready_list (state_t temp_state, bo
int cost = 0;
const char *reason = "resource conflict";
- if (modulo_epilogue_p && !DEBUG_INSN_P (insn)
- && INSN_EXACT_TICK (insn) == INVALID_TICK)
+ if (DEBUG_INSN_P (insn))
+ continue;
+
+ if (SCHED_GROUP_P (insn) && !sched_group_found)
+ {
+ sched_group_found = true;
+ if (i > 0)
+ goto restart;
+ }
+
+ if (sched_group_found && !SCHED_GROUP_P (insn))
+ {
+ cost = 1;
+ reason = "not in sched group";
+ }
+ else if (modulo_epilogue_p && INSN_EXACT_TICK (insn) == INVALID_TICK)
{
cost = max_insn_queue_index;
reason = "not an epilogue insn";
}
- if (shadows_only_p && !DEBUG_INSN_P (insn) && !SHADOW_P (insn))
+ else if (shadows_only_p && !SHADOW_P (insn))
{
cost = 1;
reason = "not a shadow";