diff --git a/.pick_status.json b/.pick_status.json index a56aa3c382f..5184c82dafd 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -553,7 +553,7 @@ "description": "ir3/postsched: Fix dependencies for a0.x/p0.x", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "0f78c32492ed096649b015a4967d6d56c18dd14a" }, diff --git a/src/freedreno/ir3/ir3_postsched.c b/src/freedreno/ir3/ir3_postsched.c index f2ff6a051a1..cf564d26479 100644 --- a/src/freedreno/ir3/ir3_postsched.c +++ b/src/freedreno/ir3/ir3_postsched.c @@ -380,7 +380,11 @@ add_reg_dep(struct ir3_postsched_deps_state *state, unsigned num, bool write) { if (state->merged) { - if (reg->flags & IR3_REG_HALF) { + /* Make sure that special registers like a0.x that are written as + * half-registers don't alias random full registers by pretending that + * they're full registers: + */ + if ((reg->flags & IR3_REG_HALF) && num < regid(48, 0)) { /* single conflict in half-reg space: */ add_single_reg_dep(state, node, num, write); } else {