broadcom/compiler: try to use ldunif(a) instead of ldunif(a)rf in v71

The rf variants need to encode the destination in the cond bits, which
prevents these to be merged with any other instruction that need them.

In 4.x, ldunif(a) write to r5 which is a special register that only
ldunif(a) and ldvary can write so we have a special register class for
it and only allow it for them. Then when we need to choose a register
for a node, if this register is available we always use it.

In 7.x these instructions write to rf0, which can be used by any
instruction, so instead of restricting rf0, we track the temps that
are used as ldunif(a) destinations and use that information to favor
rf0 for them.

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-10-28 14:13:29 +02:00
committed by Marge Bot
parent d8a25bdb07
commit 3a36a618d7
3 changed files with 41 additions and 7 deletions

View File

@@ -605,6 +605,9 @@ struct v3d_ra_node_info {
struct {
uint32_t priority;
uint8_t class_bits;
/* V3D 7.x */
bool is_ldunif_dst;
} *info;
uint32_t alloc_count;
};