From 9cfc44532b8f425b5db033e36904191242c2c9f9 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Tue, 5 Mar 2024 16:21:00 +0100 Subject: [PATCH] ir3: fix freeing incorrect register in loops While processing loop back edges, current live defs were freed through their def pointer instead of correctly using get_def(). This may cause the wrong register being freed when the current live def was reloaded. Fixes: 21cd9b9557d ("ir3: implement RA for predicate registers") Signed-off-by: Job Noorman Part-of: --- src/freedreno/ir3/ir3_ra_predicates.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freedreno/ir3/ir3_ra_predicates.c b/src/freedreno/ir3/ir3_ra_predicates.c index 43600a24f47..70f59460683 100644 --- a/src/freedreno/ir3/ir3_ra_predicates.c +++ b/src/freedreno/ir3/ir3_ra_predicates.c @@ -382,7 +382,7 @@ ra_block(struct ra_predicates_ctx *ctx, struct ir3_block *block) /* Different def in the same register, free it first. */ if (cur_def->def) - free_reg(ctx, live, cur_def->def); + free_reg(ctx, live, get_def(cur_def)); /* Reload the def in the required register right before the block's * terminator.