freedreno/ir3: don't precolor unused inputs
authorRob Clark <robdclark@chromium.org>
Sat, 18 Jan 2020 21:44:26 +0000 (13:44 -0800)
committerMarge Bot <eric+marge@anholt.net>
Sat, 1 Feb 2020 02:40:22 +0000 (02:40 +0000)
This apparently can happen with gs/tess.  And will cause problems with
two-pass-ra, so lets just skip them.

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

src/freedreno/ir3/ir3_ra.c

index 0d1028a76d76b2cfa63c57cb1b2fb783516e438e..ff357e91fb7f626a835a980e6a06d5cfb5ea2048 100644 (file)
@@ -1111,6 +1111,7 @@ ra_precolor(struct ir3_ra_ctx *ctx, struct ir3_instruction **precolor, unsigned
        for (unsigned i = 0; i < nprecolor; i++) {
                if (precolor[i] && !(precolor[i]->flags & IR3_INSTR_UNUSED)) {
                        struct ir3_instruction *instr = precolor[i];
+
                        struct ir3_ra_instr_data *id = &ctx->instrd[instr->ip];
 
                        debug_assert(!(instr->regs[0]->flags & (IR3_REG_HALF | IR3_REG_HIGH)));
@@ -1175,7 +1176,7 @@ retry:
                for (unsigned i = 0; i < nprecolor; i++) {
                        struct ir3_instruction *instr = precolor[i];
 
-                       if (!instr)
+                       if (!instr || (instr->flags & IR3_INSTR_UNUSED))
                                continue;
 
                        struct ir3_ra_instr_data *id = &ctx->instrd[instr->ip];