diff --git a/.pick_status.json b/.pick_status.json index 89c34297652..359494f12ce 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 94af23e3826..62fbfd04b07 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