freedreno/ir3/ra: fix target register calculation
authorRob Clark <robdclark@chromium.org>
Sat, 21 Mar 2020 18:07:35 +0000 (11:07 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 27 Mar 2020 22:41:36 +0000 (22:41 +0000)
Account for the # of regs an instruction writes, and fix an off-by-one.

(We are about to replace this with calculating the register target using
the live-ranges, but in debugging that it was useful to assert() if it
chose a higher target.)

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4272>

src/freedreno/ir3/ir3_ra.c

index b6c9b686b5e9a6d79389d5882715517a1a8440b7..df5f115c0b3b104fceadbc704e9e71659d30f345 100644 (file)
@@ -1036,7 +1036,7 @@ account_assignment(struct ir3_ra_ctx *ctx, struct ir3_instruction *instr)
        } else if ((id = &ctx->instrd[instr->ip]) && id->defn) {
                unsigned name = scalar_name(ctx, id->defn, 0);
                unsigned r = ra_get_node_reg(ctx->g, name);
-               max = ctx->set->ra_reg_to_gpr[r] + id->off;
+               max = ctx->set->ra_reg_to_gpr[r] + id->off + dest_regs(id->defn);
        } else {
                return;
        }