From dc04fd8e6246c213ee61e0cd88001e959cfb3e21 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Mon, 17 Jun 2024 11:34:26 +0200 Subject: [PATCH] ir3: restore interval_offset after liveness recalculation in shared RA This value is usually set by ir3_merge_regs. Since we don't need to call this again after shared RA, we have to copy it manually to the new liveness struct. Fixes: fa22b0901af ("ir3/ra: Add specialized shared register RA/spilling") Signed-off-by: Job Noorman Part-of: --- src/freedreno/ir3/ir3_shared_ra.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/freedreno/ir3/ir3_shared_ra.c b/src/freedreno/ir3/ir3_shared_ra.c index 8bdc33a5e54..ace8e61d9b3 100644 --- a/src/freedreno/ir3/ir3_shared_ra.c +++ b/src/freedreno/ir3/ir3_shared_ra.c @@ -1429,9 +1429,13 @@ ir3_ra_shared(struct ir3_shader_variant *v, struct ir3_liveness **live_ptr) /* Recalculate liveness and register pressure now that additional values have * been added. * TODO we should only do this if any values have been spilled/reloaded. + * Note: since we don't have to recreate merge sets, we have to manually copy + * interval_offset to the new liveness struct. */ + unsigned interval_offset = live->interval_offset; void *live_mem_ctx = ralloc_parent(live); ralloc_free(live); *live_ptr = ir3_calc_liveness(live_mem_ctx, v->ir); + (*live_ptr)->interval_offset = interval_offset; }