From c45487b7705ab5176bab4f46537e6fcb61c9442e Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 26 Jul 2019 11:52:30 -0700 Subject: [PATCH] pan/midgard: Extract simple source mod check Signed-off-by: Alyssa Rosenzweig --- src/panfrost/midgard/compiler.h | 2 +- src/panfrost/midgard/midgard_compile.c | 3 +-- src/panfrost/midgard/mir.c | 14 +++++++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h index decffeb..ba5bc75 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 ae526e8..f384282 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 2d10072..225b068 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); -- 2.7.4