diff options
author | Eric Anholt <[email protected]> | 2014-10-09 09:36:03 +0200 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-10-09 11:01:18 +0200 |
commit | 5a1352289862a9bd695a15009c69cad54727c66b (patch) | |
tree | edcd9f90d64fec4b1a3a67b7829a7e5fed9ae912 | |
parent | 00a9aebfe064ec252a95e0f3a38f4f6c967dadc4 (diff) |
vc4: Optimize SF(ITOF(x)) -> SF(x).
This is a common production of st_glsl_to_tgsi, because CMP takes a float
argument.
-rw-r--r-- | src/gallium/drivers/vc4/vc4_opt_algebraic.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/drivers/vc4/vc4_opt_algebraic.c b/src/gallium/drivers/vc4/vc4_opt_algebraic.c index 4155e72fd21..e247f302ee9 100644 --- a/src/gallium/drivers/vc4/vc4_opt_algebraic.c +++ b/src/gallium/drivers/vc4/vc4_opt_algebraic.c @@ -91,6 +91,22 @@ qir_opt_algebraic(struct vc4_compile *c) defs[inst->dst.index] = inst; switch (inst->op) { + case QOP_SF: + /* SF just looks at the sign bit, or whether all the + * bits are 0. This is preserved across an itof + * transformation. + */ + if (inst->src[0].file == QFILE_TEMP && + defs[inst->src[0].index]->op == QOP_ITOF) { + dump_from(c, inst); + inst->src[0] = + defs[inst->src[0].index]->src[0]; + progress = true; + dump_to(c, inst); + break; + } + break; + case QOP_SEL_X_Y_ZS: case QOP_SEL_X_Y_ZC: case QOP_SEL_X_Y_NS: |