From 082485d663301bbd1dfb14d9da11735f51c02fd0 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 25 Jul 2019 14:33:58 -0700 Subject: [PATCH] pan/midgard: Move DCE into its own file Signed-off-by: Alyssa Rosenzweig --- src/panfrost/midgard/compiler.h | 1 + src/panfrost/midgard/meson.build | 1 + src/panfrost/midgard/midgard_compile.c | 22 ------------ src/panfrost/midgard/midgard_opt_dce.c | 46 ++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 src/panfrost/midgard/midgard_opt_dce.c diff --git a/src/panfrost/midgard/compiler.h b/src/panfrost/midgard/compiler.h index 5ce1257bec9..86b6e175454 100644 --- a/src/panfrost/midgard/compiler.h +++ b/src/panfrost/midgard/compiler.h @@ -502,5 +502,6 @@ nir_clamp_psiz(nir_shader *shader, float min_size, float max_size); bool midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block); bool midgard_opt_combine_projection(compiler_context *ctx, midgard_block *block); bool midgard_opt_varying_projection(compiler_context *ctx, midgard_block *block); +bool midgard_opt_dead_code_eliminate(compiler_context *ctx, midgard_block *block); #endif diff --git a/src/panfrost/midgard/meson.build b/src/panfrost/midgard/meson.build index da3ea5dd4df..670d5ef075a 100644 --- a/src/panfrost/midgard/meson.build +++ b/src/panfrost/midgard/meson.build @@ -31,6 +31,7 @@ libpanfrost_midgard_files = files( 'midgard_ops.c', 'mir_promote_uniforms.c', 'midgard_opt_copy_prop.c', + 'midgard_opt_dce.c', 'midgard_opt_perspective.c', 'cppwrap.cpp', 'disassemble.c', diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index d4112d09c25..f07fd1b5f9e 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -1962,28 +1962,6 @@ embedded_to_inline_constant(compiler_context *ctx) } } -/* Basic dead code elimination on the MIR itself, which cleans up e.g. the - * texture pipeline */ - -static bool -midgard_opt_dead_code_eliminate(compiler_context *ctx, midgard_block *block) -{ - bool progress = false; - - mir_foreach_instr_in_block_safe(block, ins) { - if (ins->type != TAG_ALU_4) continue; - if (ins->compact_branch) continue; - - if (ins->ssa_args.dest >= SSA_FIXED_MINIMUM) continue; - if (mir_is_live_after(ctx, block, ins, ins->ssa_args.dest)) continue; - - mir_remove_instruction(ins); - progress = true; - } - - return progress; -} - /* Dead code elimination for branches at the end of a block - only one branch * per block is legal semantically */ diff --git a/src/panfrost/midgard/midgard_opt_dce.c b/src/panfrost/midgard/midgard_opt_dce.c new file mode 100644 index 00000000000..6621c2fe2dd --- /dev/null +++ b/src/panfrost/midgard/midgard_opt_dce.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2018 Alyssa Rosenzweig + * Copyright (C) 2019 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "compiler.h" + +/* Basic dead code elimination on the MIR itself */ + +bool +midgard_opt_dead_code_eliminate(compiler_context *ctx, midgard_block *block) +{ + bool progress = false; + + mir_foreach_instr_in_block_safe(block, ins) { + if (ins->type != TAG_ALU_4) continue; + if (ins->compact_branch) continue; + + if (ins->ssa_args.dest >= SSA_FIXED_MINIMUM) continue; + if (mir_is_live_after(ctx, block, ins, ins->ssa_args.dest)) continue; + + mir_remove_instruction(ins); + progress = true; + } + + return progress; +} -- 2.30.2