diff --git a/.pick_status.json b/.pick_status.json index 359b943011d..879aca95f5b 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -14,7 +14,7 @@ "description": "ir3/shared_ra: fix live-out reload after src reload", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "fa22b0901af548d5e1433ad4cdbda314182137c5", "notes": null diff --git a/src/freedreno/ir3/ir3_shared_ra.c b/src/freedreno/ir3/ir3_shared_ra.c index e90e63c85fb..58b2ba4fc67 100644 --- a/src/freedreno/ir3/ir3_shared_ra.c +++ b/src/freedreno/ir3/ir3_shared_ra.c @@ -1246,7 +1246,9 @@ reload_live_outs(struct ra_ctx *ctx, struct ir3_block *block) struct ir3_register *reg = ctx->live->definitions[name]; struct ra_interval *interval = &ctx->intervals[name]; - if (!interval->interval.inserted) { + if (!interval->interval.inserted || + (interval->spill_def && + interval->physreg_start != interval->physreg_start_orig)) { d("reloading %d at end of backedge", reg->name); /* When this interval was spilled inside the loop, we probably chose a