ir3/a7xx: enable delayed src2 read for all cat3 instructions

cat3 instructions read their 3rd src later than their first two srcs.
Pre-a7xx, this was only supported for mad(sh) but on a7xx, it works for
all cat3 instructions.

Signed-off-by: Job Noorman <jnoorman@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33183>
This commit is contained in:
Job Noorman 2025-01-23 12:09:35 +01:00 committed by Marge Bot
parent 992a6cc050
commit f577118fe1

View file

@ -37,8 +37,13 @@ ir3_src_read_delay(struct ir3_compiler *compiler, struct ir3_instruction *instr,
return src_n;
}
/* cat3 instructions consume their last source one or two cycles later. */
if ((is_mad(instr->opc) || is_madsh(instr->opc)) && src_n == 2) {
/* cat3 instructions consume their last source one or two cycles later. Note
* that not all cat3 instructions seem to do this pre-a7xx.
*/
bool cat3_reads_later = compiler->gen >= 7
? (opc_cat(instr->opc) == 3)
: (is_mad(instr->opc) || is_madsh(instr->opc));
if (cat3_reads_later && src_n == 2) {
return compiler->delay_slots.cat3_src2_read;
}