mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
vc4: Reduce MOV special-casing in QIR-to-QPU.
I'm going to introduce some more types of MOV, which also want the elision of raw MOVs.
This commit is contained in:
parent
652a864b25
commit
a7b424e835
1 changed files with 11 additions and 8 deletions
|
|
@ -209,6 +209,11 @@ vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c)
|
|||
M(V8ADDS),
|
||||
M(V8SUBS),
|
||||
M(MUL24),
|
||||
|
||||
/* If we replicate src[0] out to src[1], this works
|
||||
* out the same as a MOV.
|
||||
*/
|
||||
[QOP_MOV] = { QPU_A_OR },
|
||||
};
|
||||
|
||||
struct qpu_reg src[4];
|
||||
|
|
@ -264,14 +269,6 @@ vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c)
|
|||
}
|
||||
|
||||
switch (qinst->op) {
|
||||
case QOP_MOV:
|
||||
/* Skip emitting the MOV if it's a no-op. */
|
||||
if (qir_is_raw_mov(qinst) ||
|
||||
dst.mux != src[0].mux || dst.addr != src[0].addr) {
|
||||
queue(c, qpu_a_MOV(dst, src[0]));
|
||||
}
|
||||
break;
|
||||
|
||||
case QOP_SEL_X_0_ZS:
|
||||
case QOP_SEL_X_0_ZC:
|
||||
case QOP_SEL_X_0_NS:
|
||||
|
|
@ -490,6 +487,12 @@ vc4_generate_code(struct vc4_context *vc4, struct vc4_compile *c)
|
|||
assert(qinst->op < ARRAY_SIZE(translate));
|
||||
assert(translate[qinst->op].op != 0); /* NOPs */
|
||||
|
||||
/* Skip emitting the MOV if it's a no-op. */
|
||||
if (qir_is_raw_mov(qinst) &&
|
||||
dst.mux == src[0].mux && dst.addr == src[0].addr) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we have only one source, put it in the second
|
||||
* argument slot as well so that we don't take up
|
||||
* another raddr just to get unused data.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue