diff --git a/.pick_status.json b/.pick_status.json index b35284f4c9e..393c5f96271 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1300,7 +1300,7 @@ "description": "broadcom/compiler: don't move ldvary earlier if current instruction has ldunif", "nominated": false, "nomination_type": null, - "resolution": 4, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/broadcom/compiler/qpu_schedule.c b/src/broadcom/compiler/qpu_schedule.c index cfce937f4a0..7b9891e869f 100644 --- a/src/broadcom/compiler/qpu_schedule.c +++ b/src/broadcom/compiler/qpu_schedule.c @@ -2001,6 +2001,17 @@ fixup_pipelined_ldvary(struct v3d_compile *c, if (alu_reads_register(inst, false, ldvary_magic, ldvary_index)) return false; + /* The implicit ldvary destination may not be written to by a signal + * in the instruction following ldvary. Since we are planning to move + * ldvary to the previous instruction, this means we need to check if + * the current instruction has any other signal that could create this + * conflict. The only other signal that can write to the implicit + * ldvary destination that is compatible with ldvary in the same + * instruction is ldunif. + */ + if (inst->sig.ldunif) + return false; + /* The previous instruction can't write to the same destination as the * ldvary. */