diff options
author | Eric Anholt <[email protected]> | 2014-10-09 15:07:24 +0200 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-10-09 21:47:06 +0200 |
commit | 1cd8c1aab04c4da9aa6cbbd52460607b8416ce1b (patch) | |
tree | 385a1c116fa5d070d6f13ca82c20a618641e2bd3 /src/gallium | |
parent | 40748cf8d9b9f4d72bcfb9872d891c1705a81b8d (diff) |
vc4: Factor out the turn-it-into-a-mov in opt_algebraic.
This will be used more in the next commits.
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_opt_algebraic.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/gallium/drivers/vc4/vc4_opt_algebraic.c b/src/gallium/drivers/vc4/vc4_opt_algebraic.c index e247f302ee9..8c6fcef5936 100644 --- a/src/gallium/drivers/vc4/vc4_opt_algebraic.c +++ b/src/gallium/drivers/vc4/vc4_opt_algebraic.c @@ -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; |