all_delayed will also be true if we didn't attempt to schedule anything
due to no more instructions using current addr/pred. We rely on coming
in to block_sched_undelayed() to detect and clean up when there are no
more uses of the current addr/pred, which isn't necessarily an error.
This fixes a regression introduced in
b823abed.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
bool addr_in_use = false;
bool pred_in_use = false;
bool all_delayed = true;
- unsigned cnt = ~0;
+ unsigned cnt = ~0, attempted = 0;
while (instr) {
struct ir3_instruction *next = instr->next;
addr_in_use = true;
if (pred)
pred_in_use = true;
+
+ attempted++;
}
instr = next;
/* detect if we've gotten ourselves into an impossible situation
* and bail if needed
*/
- if (all_delayed)
+ if (all_delayed && (attempted > 0))
ctx->error = true;
return cnt;