summaryrefslogtreecommitdiffstats
path: root/src/panfrost/midgard
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-07-26 11:52:30 -0700
committerAlyssa Rosenzweig <[email protected]>2019-07-30 10:35:09 -0700
commitc45487b7705ab5176bab4f46537e6fcb61c9442e (patch)
tree9452863a704b8be9d7bef11e25b35814b51122ad /src/panfrost/midgard
parent2d2abb08d0eaeb7bf25655bdff4ea8dccee9a504 (diff)
pan/midgard: Extract simple source mod check
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/panfrost/midgard')
-rw-r--r--src/panfrost/midgard/compiler.h2
-rw-r--r--src/panfrost/midgard/midgard_compile.c3
-rw-r--r--src/panfrost/midgard/mir.c14
3 files changed, 15 insertions, 4 deletions
diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h
index decffeb2f70..ba5bc75810b 100644
--- a/src/panfrost/midgard/compiler.h
+++ b/src/panfrost/midgard/compiler.h
@@ -443,8 +443,8 @@ void mir_print_instruction(midgard_instruction *ins);
void mir_print_bundle(midgard_bundle *ctx);
void mir_print_block(midgard_block *block);
void mir_print_shader(compiler_context *ctx);
-bool mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int);
bool mir_nontrivial_source2_mod(midgard_instruction *ins);
+bool mir_nontrivial_source2_mod_simple(midgard_instruction *ins);
bool mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask);
bool mir_nontrivial_outmod(midgard_instruction *ins);
diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c
index ae526e89eff..f3842820f3d 100644
--- a/src/panfrost/midgard/midgard_compile.c
+++ b/src/panfrost/midgard/midgard_compile.c
@@ -1877,8 +1877,7 @@ embedded_to_inline_constant(compiler_context *ctx)
/* We don't know how to handle these with a constant */
- bool is_int = midgard_is_integer_op(ins->alu.op);
- if (mir_nontrivial_raw_mod(*src, is_int) || src->half || src->rep_low || src->rep_high) {
+ if (mir_nontrivial_source2_mod_simple(ins) || src->rep_low || src->rep_high) {
DBG("Bailing inline constant...\n");
continue;
}
diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c
index 2d100728724..225b0680f3f 100644
--- a/src/panfrost/midgard/mir.c
+++ b/src/panfrost/midgard/mir.c
@@ -108,7 +108,7 @@ mir_single_use(compiler_context *ctx, unsigned value)
return mir_use_count(ctx, value) <= 1;
}
-bool
+static bool
mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int)
{
if (is_int)
@@ -133,6 +133,7 @@ mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
return false;
}
+
bool
mir_nontrivial_source2_mod(midgard_instruction *ins)
{
@@ -145,6 +146,17 @@ mir_nontrivial_source2_mod(midgard_instruction *ins)
}
bool
+mir_nontrivial_source2_mod_simple(midgard_instruction *ins)
+{
+ bool is_int = midgard_is_integer_op(ins->alu.op);
+
+ midgard_vector_alu_src src2 =
+ vector_alu_from_unsigned(ins->alu.src2);
+
+ return mir_nontrivial_raw_mod(src2, is_int) && !src2.half;
+}
+
+bool
mir_nontrivial_outmod(midgard_instruction *ins)
{
bool is_int = midgard_is_integer_op(ins->alu.op);