From 295f906517ead02834630a08dcd1f50e9d15f48d Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Tue, 30 Jan 2024 08:10:56 +0100 Subject: [PATCH] broadcom/compiler: don't move subgroup reduction instructions above setmsf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These use the sample mask to decide about active lanes, so we need to make sure we don't move them above a previous setmsf instruction. Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/compiler/qpu_schedule.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/broadcom/compiler/qpu_schedule.c b/src/broadcom/compiler/qpu_schedule.c index f619ea3c1d8..307bd21dbae 100644 --- a/src/broadcom/compiler/qpu_schedule.c +++ b/src/broadcom/compiler/qpu_schedule.c @@ -85,6 +85,7 @@ struct schedule_state { struct schedule_node *last_unif; struct schedule_node *last_rtop; struct schedule_node *last_unifa; + struct schedule_node *last_setmsf; enum direction dir; /* Estimated cycle when the current instruction would start. */ uint32_t time; @@ -378,15 +379,24 @@ calculate_deps(struct schedule_state *state, struct schedule_node *n) case V3D_QPU_A_MSF: add_read_dep(state, state->last_tlb, n); + add_read_dep(state, state->last_setmsf, n); break; case V3D_QPU_A_SETMSF: + add_write_dep(state, &state->last_setmsf, n); add_write_dep(state, &state->last_tmu_write, n); FALLTHROUGH; case V3D_QPU_A_SETREVF: add_write_dep(state, &state->last_tlb, n); break; + case V3D_QPU_A_BALLOT: + case V3D_QPU_A_BCASTF: + case V3D_QPU_A_ALLEQ: + case V3D_QPU_A_ALLFEQ: + add_read_dep(state, state->last_setmsf, n); + break; + default: break; }