summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-07-26 08:50:22 -0700
committerAlyssa Rosenzweig <[email protected]>2019-07-26 09:47:40 -0700
commit94e281b9e08c46ebc7112ecf251e71a1a666805b (patch)
tree638170761d4b4cfd8fd2e4b582788d2310226769 /src
parente823d33e7791582f49d72d4132680092e0aeb348 (diff)
pan/midgard: Specialize mod checking by type when checking constants
Fixes inlining of integer constants. total quadwords in shared programs: 3585 -> 3568 (-0.47%) quadwords in affected programs: 625 -> 608 (-2.72%) helped: 13 HURT: 0 helped stats (abs) min: 1 max: 2 x̄: 1.31 x̃: 1 helped stats (rel) min: 1.27% max: 9.52% x̄: 3.84% x̃: 2.94% 95% mean confidence interval for quadwords value: -1.60 -1.02 95% mean confidence interval for quadwords %-change: -5.60% -2.07% Quadwords are helped. Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/panfrost/midgard/compiler.h1
-rw-r--r--src/panfrost/midgard/midgard_compile.c3
-rw-r--r--src/panfrost/midgard/mir.c16
3 files changed, 13 insertions, 7 deletions
diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h
index 84a00fb0174..53d995a109e 100644
--- a/src/panfrost/midgard/compiler.h
+++ b/src/panfrost/midgard/compiler.h
@@ -390,6 +390,7 @@ 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_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 b49f50dc584..48f7bbd38b5 100644
--- a/src/panfrost/midgard/midgard_compile.c
+++ b/src/panfrost/midgard/midgard_compile.c
@@ -1902,7 +1902,8 @@ embedded_to_inline_constant(compiler_context *ctx)
/* We don't know how to handle these with a constant */
- if (src->mod || src->half || src->rep_low || src->rep_high) {
+ 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) {
DBG("Bailing inline constant...\n");
continue;
}
diff --git a/src/panfrost/midgard/mir.c b/src/panfrost/midgard/mir.c
index 75da2fb0864..963652eed3d 100644
--- a/src/panfrost/midgard/mir.c
+++ b/src/panfrost/midgard/mir.c
@@ -109,13 +109,18 @@ mir_single_use(compiler_context *ctx, unsigned value)
}
bool
-mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
+mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int)
{
- /* abs or neg */
- if (!is_int && src.mod) return true;
+ if (is_int)
+ return src.mod == midgard_int_shift;
+ else
+ return src.mod;
+}
- /* Other int mods don't matter in isolation */
- if (is_int && src.mod == midgard_int_shift) return true;
+bool
+mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
+{
+ if (mir_nontrivial_raw_mod(src, is_int)) return true;
/* size-conversion */
if (src.half) return true;
@@ -128,7 +133,6 @@ mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask)
return false;
}
-
bool
mir_nontrivial_source2_mod(midgard_instruction *ins)
{