summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-12-10 15:37:07 -0800
committerEric Anholt <eric@anholt.net>2014-12-17 19:05:52 -0800
commitff266483fb61fd69775daf5c931ca7a56a26f4ac (patch)
treeb09828e0ccc30076d21f0461af574becf1744f6d
parent8d22e8907fde509ad33c5699cd14cd1bebc3601d (diff)
vc4: Move follow_movs() to common QIR code.
I want this from other passes.
-rw-r--r--src/gallium/drivers/vc4/vc4_opt_algebraic.c13
-rw-r--r--src/gallium/drivers/vc4/vc4_qir.c9
-rw-r--r--src/gallium/drivers/vc4/vc4_qir.h1
3 files changed, 12 insertions, 11 deletions
diff --git a/src/gallium/drivers/vc4/vc4_opt_algebraic.c b/src/gallium/drivers/vc4/vc4_opt_algebraic.c
index ec526fb3d18..4376c7ba08f 100644
--- a/src/gallium/drivers/vc4/vc4_opt_algebraic.c
+++ b/src/gallium/drivers/vc4/vc4_opt_algebraic.c
@@ -59,19 +59,10 @@ dump_to(struct vc4_compile *c, struct qinst *inst)
fprintf(stderr, "\n");
}
-static struct qreg
-follow_movs(struct qinst **defs, struct qreg reg)
-{
- while (reg.file == QFILE_TEMP && defs[reg.index]->op == QOP_MOV)
- reg = defs[reg.index]->src[0];
-
- return reg;
-}
-
static bool
is_zero(struct vc4_compile *c, struct qinst **defs, struct qreg reg)
{
- reg = follow_movs(defs, reg);
+ reg = qir_follow_movs(defs, reg);
return (reg.file == QFILE_UNIF &&
c->uniform_contents[reg.index] == QUNIFORM_CONSTANT &&
@@ -81,7 +72,7 @@ is_zero(struct vc4_compile *c, struct qinst **defs, struct qreg reg)
static bool
is_1f(struct vc4_compile *c, struct qinst **defs, struct qreg reg)
{
- reg = follow_movs(defs, reg);
+ reg = qir_follow_movs(defs, reg);
return (reg.file == QFILE_UNIF &&
c->uniform_contents[reg.index] == QUNIFORM_CONSTANT &&
diff --git a/src/gallium/drivers/vc4/vc4_qir.c b/src/gallium/drivers/vc4/vc4_qir.c
index 49b79014c09..d7251abda1c 100644
--- a/src/gallium/drivers/vc4/vc4_qir.c
+++ b/src/gallium/drivers/vc4/vc4_qir.c
@@ -327,6 +327,15 @@ qir_remove_instruction(struct qinst *qinst)
free(qinst);
}
+struct qreg
+qir_follow_movs(struct qinst **defs, struct qreg reg)
+{
+ while (reg.file == QFILE_TEMP && defs[reg.index]->op == QOP_MOV)
+ reg = defs[reg.index]->src[0];
+
+ return reg;
+}
+
void
qir_compile_destroy(struct vc4_compile *c)
{
diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h
index 46f4c12b22c..40c0d3d04dd 100644
--- a/src/gallium/drivers/vc4/vc4_qir.h
+++ b/src/gallium/drivers/vc4/vc4_qir.h
@@ -371,6 +371,7 @@ bool qir_has_side_effects(struct vc4_compile *c, struct qinst *inst);
bool qir_depends_on_flags(struct qinst *inst);
bool qir_writes_r4(struct qinst *inst);
bool qir_reads_r4(struct qinst *inst);
+struct qreg qir_follow_movs(struct qinst **defs, struct qreg reg);
void qir_dump(struct vc4_compile *c);
void qir_dump_inst(struct vc4_compile *c, struct qinst *inst);