From 7bde2ce13fbc8220c683ee8373ced973f0da1bc7 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 23 Nov 2021 08:49:53 +0100 Subject: [PATCH] broadcom/compiler: don't move ldvary earlier if current instruction has ldunif If we did, we would have the instruction coming right after ldvary write to the same implicit destination as ldvary at the same time. We prevent this when merging instructions, but we should make sure we prevent this when we move ldvary around for pipelining too. Reviewed-by: Juan A. Suarez (cherry picked from commit 79dee14cc218d87ea8a5020507161a363477f09a) Part-of: --- .pick_status.json | 2 +- src/broadcom/compiler/qpu_schedule.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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. */