vc4: Fix the test for skipping raw MOVs.
authorEric Anholt <eric@anholt.net>
Sat, 24 Oct 2015 23:30:30 +0000 (16:30 -0700)
committerEric Anholt <eric@anholt.net>
Sun, 25 Oct 2015 00:55:22 +0000 (17:55 -0700)
I don't know what previous test was trying to do, but it dates back to the
first add of vc4_qpu_emit.c.  No change to shader-db.

src/gallium/drivers/vc4/vc4_qir.c
src/gallium/drivers/vc4/vc4_qir.h
src/gallium/drivers/vc4/vc4_qpu_emit.c

index e7d0d664e19813858643f65073b3ed1a06f05ce4..3d3989fa95d1b3a7a4a2f2953e475fd2148ea8f7 100644 (file)
@@ -189,6 +189,14 @@ qir_is_mul(struct qinst *inst)
         }
 }
 
+bool
+qir_is_raw_mov(struct qinst *inst)
+{
+        return (inst->op == QOP_MOV &&
+                !inst->dst.pack &&
+                !inst->src[0].pack);
+}
+
 bool
 qir_is_tex(struct qinst *inst)
 {
index fa1b50f3d102662844af5568c4fd0fa4d6112ff4..aa4d9328f373424c528f850969d94102ed4805b5 100644 (file)
@@ -463,6 +463,7 @@ bool qir_has_side_effects(struct vc4_compile *c, struct qinst *inst);
 bool qir_has_side_effect_reads(struct vc4_compile *c, struct qinst *inst);
 bool qir_is_multi_instruction(struct qinst *inst);
 bool qir_is_mul(struct qinst *inst);
+bool qir_is_raw_mov(struct qinst *inst);
 bool qir_is_tex(struct qinst *inst);
 bool qir_depends_on_flags(struct qinst *inst);
 bool qir_writes_r4(struct qinst *inst);
index 4c81deb8eaa12f585ec0d89f7f07e2098b71d5ee..2055fa5d231c7f2341b2af411b97351b82415a38 100644 (file)
@@ -266,7 +266,7 @@ 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 (dst.mux == QPU_MUX_A || dst.mux == QPU_MUX_B ||
+                        if (qir_is_raw_mov(qinst) ||
                             dst.mux != src[0].mux || dst.addr != src[0].addr) {
                                 queue(c, qpu_a_MOV(dst, src[0]));
                         }