freedreno/ir3/ra: fix failed assert for a0/p0
authorRob Clark <robclark@freedesktop.org>
Sun, 5 Jul 2015 23:53:10 +0000 (19:53 -0400)
committerRob Clark <robclark@freedesktop.org>
Fri, 10 Jul 2015 15:57:31 +0000 (11:57 -0400)
The address and predicate register are special, they don't get assigned
in RA.  So do a better job of ignoring them rather than hitting later
asserts.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_ra.c

index de48ecfe2806810b1b737f138541a66aa05ad417..eaf3b3c35e835ce103af83b6edf4db45846bb5c3 100644 (file)
@@ -469,6 +469,11 @@ ra_block_find_definers(struct ir3_ra_ctx *ctx, struct ir3_block *block)
                struct ir3_ra_instr_data *id = &ctx->instrd[instr->ip];
                if (instr->regs_count == 0)
                        continue;
+               /* couple special cases: */
+               if (writes_addr(instr) || writes_pred(instr)) {
+                       id->cls = -1;
+                       continue;
+               }
                id->defn = get_definer(ctx, instr, &id->sz, &id->off);
                id->cls = size_to_class(id->sz, is_half(id->defn));
        }