freedreno/ir3: split pre-coloring to it's own function
authorRob Clark <robdclark@chromium.org>
Tue, 22 Oct 2019 16:22:58 +0000 (09:22 -0700)
committerRob Clark <robdclark@gmail.com>
Sat, 9 Nov 2019 02:49:14 +0000 (02:49 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
src/freedreno/ir3/ir3_ra.c

index 39d34bb51d99aba6b65d82acc61a77b0b156e3b1..100ce4223543308d019368816a93ee228a7a0988 100644 (file)
@@ -1089,8 +1089,12 @@ ra_block_alloc(struct ir3_ra_ctx *ctx, struct ir3_block *block)
        }
 }
 
-static int
-ra_alloc(struct ir3_ra_ctx *ctx, struct ir3_instruction **precolor, unsigned nprecolor)
+/* handle pre-colored registers.  This includes "arrays" (which could be of
+ * length 1, used for phi webs lowered to registers in nir), as well as
+ * special shader input values that need to be pinned to certain registers.
+ */
+static void
+ra_precolor(struct ir3_ra_ctx *ctx, struct ir3_instruction **precolor, unsigned nprecolor)
 {
        unsigned num_precolor = 0;
        for (unsigned i = 0; i < nprecolor; i++) {
@@ -1195,7 +1199,11 @@ retry:
                        ra_set_node_reg(ctx->g, name, reg);
                }
        }
+}
 
+static int
+ra_alloc(struct ir3_ra_ctx *ctx)
+{
        if (!ra_allocate(ctx->g))
                return -1;
 
@@ -1217,7 +1225,8 @@ int ir3_ra(struct ir3_shader_variant *v, struct ir3_instruction **precolor, unsi
 
        ra_init(&ctx);
        ra_add_interference(&ctx);
-       ret = ra_alloc(&ctx, precolor, nprecolor);
+       ra_precolor(&ctx, precolor, nprecolor);
+       ret = ra_alloc(&ctx);
        ra_destroy(&ctx);
 
        return ret;