From: Eric Anholt Date: Tue, 23 Sep 2014 19:50:05 +0000 (-0700) Subject: vc4: Fix overzealous raddr conflict resolution. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3e5325e8c9a389c087bb4943f99f7a8db9e8347c;p=mesa.git vc4: Fix overzealous raddr conflict resolution. We only need to do the fixup when both args are in the same file, not just when both are in physical registers. --- diff --git a/src/gallium/drivers/vc4/vc4_qpu_emit.c b/src/gallium/drivers/vc4/vc4_qpu_emit.c index 81b3b8bd784..985f2c4bdab 100644 --- a/src/gallium/drivers/vc4/vc4_qpu_emit.c +++ b/src/gallium/drivers/vc4/vc4_qpu_emit.c @@ -79,12 +79,14 @@ static void fixup_raddr_conflict(struct vc4_compile *c, struct qpu_reg src0, struct qpu_reg *src1) { - if ((src0.mux == QPU_MUX_A || src0.mux == QPU_MUX_B) && - (src1->mux == QPU_MUX_A || src1->mux == QPU_MUX_B) && - src0.addr != src1->addr) { - queue(c, qpu_a_MOV(qpu_r3(), *src1)); - *src1 = qpu_r3(); + if ((src0.mux != QPU_MUX_A && src0.mux != QPU_MUX_B) || + src0.mux != src1->mux || + src0.addr == src1->addr) { + return; } + + queue(c, qpu_a_MOV(qpu_r3(), *src1)); + *src1 = qpu_r3(); } static void