diff --git a/.pick_status.json b/.pick_status.json index 018e41f8228..7e112fce65a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3844,7 +3844,7 @@ "description": "ir3/legalize: take wrmask into account for delay updates", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "61b2bd861f97affbfdbe7e92eccb3dd4f7e65609", "notes": null diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index 3e6ddfd3ca4..043e2190ecc 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -247,6 +247,10 @@ delay_update(struct ir3_legalize_ctx *ctx, continue; for (unsigned elem = 0; elem < elems; elem++, num++) { + /* Don't update delays for registers that aren't actually written. */ + if (!(dst->flags & IR3_REG_RELATIV) && !(dst->wrmask & (1 << elem))) + continue; + for (unsigned consumer_alu = 0; consumer_alu < 2; consumer_alu++) { for (unsigned matching_size = 0; matching_size < 2; matching_size++) { unsigned *ready_slot =