ir3/cp: Clone registers for compare-folding optimization
authorConnor Abbott <cwabbott0@gmail.com>
Mon, 26 Apr 2021 21:07:36 +0000 (23:07 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 3 May 2021 19:52:31 +0000 (19:52 +0000)
Sharing the same register between instructions happened to work with the
old RA, but not with the new RA because they may get different register
assignments.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10591>

src/freedreno/ir3/ir3_cp.c

index 887a6f4..20453da 100644 (file)
@@ -563,8 +563,8 @@ instr_cp(struct ir3_cp_ctx *ctx, struct ir3_instruction *instr)
                        instr->flags = cond->flags;
                        instr->cat2  = cond->cat2;
                        ir3_instr_set_address(instr, cond->address);
-                       instr->regs[1] = cond->regs[1];
-                       instr->regs[2] = cond->regs[2];
+                       instr->regs[1] = ir3_reg_clone(ctx->shader, cond->regs[1]);
+                       instr->regs[2] = ir3_reg_clone(ctx->shader, cond->regs[2]);
                        instr->barrier_class |= cond->barrier_class;
                        instr->barrier_conflict |= cond->barrier_conflict;
                        unuse(cond);