vc4: Factor out the turn-it-into-a-mov in opt_algebraic.
authorEric Anholt <eric@anholt.net>
Thu, 9 Oct 2014 13:07:24 +0000 (15:07 +0200)
committerEric Anholt <eric@anholt.net>
Thu, 9 Oct 2014 19:47:06 +0000 (21:47 +0200)
This will be used more in the next commits.

src/gallium/drivers/vc4/vc4_opt_algebraic.c

index e247f302ee9000b4738fbc8441c5e0895207593f..8c6fcef5936328831a6d699c72950e3e4ca5d1b5 100644 (file)
@@ -77,6 +77,16 @@ is_zero(struct vc4_compile *c, struct qinst **defs, struct qreg reg)
                 c->uniform_data[reg.index] == 0);
 }
 
+static void
+replace_with_mov(struct vc4_compile *c, struct qinst *inst, struct qreg arg)
+{
+        dump_from(c, inst);
+        inst->op = QOP_MOV;
+        inst->src[0] = arg;
+        inst->src[1] = c->undef;
+        dump_to(c, inst);
+}
+
 bool
 qir_opt_algebraic(struct vc4_compile *c)
 {
@@ -115,12 +125,8 @@ qir_opt_algebraic(struct vc4_compile *c)
                                 /* Turn "dst = (sf == x) ? a : a)" into
                                  * "dst = a"
                                  */
-                                dump_from(c, inst);
-                                inst->op = QOP_MOV;
-                                inst->src[0] = inst->src[1];
-                                inst->src[1] = c->undef;
+                                replace_with_mov(c, inst, inst->src[1]);
                                 progress = true;
-                                dump_to(c, inst);
                         } else if (is_zero(c, defs, inst->src[1])) {
                                 /* Replace references to a 0 uniform value
                                  * with the SEL_X_0 equivalent.
@@ -136,11 +142,7 @@ qir_opt_algebraic(struct vc4_compile *c)
                 case QOP_FSUB:
                 case QOP_SUB:
                         if (is_zero(c, defs, inst->src[1])) {
-                                dump_from(c, inst);
-                                inst->op = QOP_MOV;
-                                inst->src[1] = c->undef;
-                                progress = true;
-                                dump_to(c, inst);
+                                replace_with_mov(c, inst, inst->src[0]);
                         }
                         break;