broadcom/compiler: prevent rf2-3 usage in thread end delay slots for v71

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450>
This commit is contained in:
Iago Toral Quiroga 2021-09-27 11:49:24 +02:00 committed by Marge Bot
parent 28bb1b3ff6
commit caf28e5681

View file

@ -1691,16 +1691,35 @@ qpu_inst_valid_in_thrend_slot(struct v3d_compile *c,
if (c->devinfo->ver < 40 && inst->alu.add.op == V3D_QPU_A_SETMSF)
return false;
/* RF0-2 might be overwritten during the delay slots by
* fragment shader setup.
*/
if (inst->raddr_a < 3 && v3d_qpu_uses_mux(inst, V3D_QPU_MUX_A))
return false;
if (c->devinfo->ver <= 42) {
/* RF0-2 might be overwritten during the delay slots by
* fragment shader setup.
*/
if (inst->raddr_a < 3 && v3d_qpu_uses_mux(inst, V3D_QPU_MUX_A))
return false;
if (inst->raddr_b < 3 &&
!inst->sig.small_imm_b &&
v3d_qpu_uses_mux(inst, V3D_QPU_MUX_B)) {
return false;
if (inst->raddr_b < 3 &&
!inst->sig.small_imm_b &&
v3d_qpu_uses_mux(inst, V3D_QPU_MUX_B)) {
return false;
}
}
if (c->devinfo->ver >= 71) {
/* RF2-3 might be overwritten during the delay slots by
* fragment shader setup.
*
* FIXME: handle small immediate cases
*/
if (v3d71_qpu_reads_raddr(inst, 2) ||
v3d71_qpu_reads_raddr(inst, 3)) {
return false;
}
if (v3d71_qpu_writes_waddr_explicitly(c->devinfo, inst, 2) ||
v3d71_qpu_writes_waddr_explicitly(c->devinfo, inst, 3)) {
return false;
}
}
}