From 1b658533e1109b8ff9a6578a7eb4b390454e7876 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Sun, 21 Jan 2018 11:13:44 -0500 Subject: freedreno/ir3: extend liverange of arrays Use livein state of other blocks to extend liverange of arrays when they are still needed by successor blocks. Signed-off-by: Rob Clark --- src/gallium/drivers/freedreno/ir3/ir3_ra.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/gallium/drivers') diff --git a/src/gallium/drivers/freedreno/ir3/ir3_ra.c b/src/gallium/drivers/freedreno/ir3/ir3_ra.c index a22e4ca4918..9158aa53b7d 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_ra.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_ra.c @@ -946,6 +946,17 @@ ra_add_interference(struct ir3_ra_ctx *ctx) ctx->use[i] = MAX2(ctx->use[i], block->end_ip); } } + + list_for_each_entry (struct ir3_array, arr, &ctx->ir->array_list, node) { + for (unsigned i = 0; i < arr->length; i++) { + if (BITSET_TEST(bd->livein, i + arr->base)) { + arr->start_ip = MIN2(arr->start_ip, block->start_ip); + } + if (BITSET_TEST(bd->livein, i + arr->base)) { + arr->end_ip = MAX2(arr->end_ip, block->end_ip); + } + } + } } /* need to fix things up to keep outputs live: */ -- cgit v1.2.3