mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
freedreno/ir3: fix kill scheduling
kill (and other cat0/flow instructions) do not have a dst register. Which was mostly harmless before, other than RA thinking it would need a free register to write. (But nothing consumed it, so the value would be immediately dead.) But this would cause more problems with postsched which would see a bogus dependency. Also, post-RA sched *does* need to see the dependency on the predicate register. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>
This commit is contained in:
parent
9a9f78f1f9
commit
3369406e44
2 changed files with 2 additions and 1 deletions
|
|
@ -794,7 +794,7 @@ static inline bool is_meta(struct ir3_instruction *instr)
|
|||
|
||||
static inline unsigned dest_regs(struct ir3_instruction *instr)
|
||||
{
|
||||
if ((instr->regs_count == 0) || is_store(instr))
|
||||
if ((instr->regs_count == 0) || is_store(instr) || is_flow(instr))
|
||||
return 0;
|
||||
|
||||
return util_last_bit(instr->regs[0]->wrmask);
|
||||
|
|
|
|||
|
|
@ -1780,6 +1780,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
cond->regs[0]->flags &= ~IR3_REG_SSA;
|
||||
|
||||
kill = ir3_KILL(b, cond, 0);
|
||||
kill->regs[1]->num = regid(REG_P0, 0);
|
||||
array_insert(ctx->ir, ctx->ir->predicates, kill);
|
||||
|
||||
array_insert(b, b->keeps, kill);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue