mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
panfrost/midgard: Dead code eliminate MIR
We reshuffle the existing "dead move elimination" pass into a generic dead code elimination layer, fixing bugs incurred with looping in the process. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
This commit is contained in:
parent
328a5ef598
commit
84f09ff433
1 changed files with 10 additions and 15 deletions
|
|
@ -643,8 +643,6 @@ print_mir_block(midgard_block *block)
|
||||||
printf("}\n");
|
printf("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
attach_constants(compiler_context *ctx, midgard_instruction *ins, void *constants, int name)
|
attach_constants(compiler_context *ctx, midgard_instruction *ins, void *constants, int name)
|
||||||
{
|
{
|
||||||
|
|
@ -3045,26 +3043,18 @@ map_ssa_to_alias(compiler_context *ctx, int *ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define AS_SRC(to, u) \
|
/* Basic dead code elimination on the MIR itself, which cleans up e.g. the
|
||||||
int q##to = ins->alu.src2; \
|
* texture pipeline */
|
||||||
midgard_vector_alu_src *to = (midgard_vector_alu_src *) &q##to;
|
|
||||||
|
|
||||||
/* Removing unused moves is necessary to clean up the texture pipeline results.
|
|
||||||
*
|
|
||||||
* To do so, we find moves in the MIR. We check if their destination is live later. If it's not, the move is redundant. */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midgard_eliminate_orphan_moves(compiler_context *ctx, midgard_block *block)
|
midgard_opt_dead_code_eliminate(compiler_context *ctx, midgard_block *block)
|
||||||
{
|
{
|
||||||
mir_foreach_instr_in_block_safe(block, ins) {
|
mir_foreach_instr_in_block_safe(block, ins) {
|
||||||
if (ins->type != TAG_ALU_4) continue;
|
if (ins->type != TAG_ALU_4) continue;
|
||||||
|
if (ins->compact_branch) continue;
|
||||||
if (ins->alu.op != midgard_alu_op_fmov) continue;
|
|
||||||
|
|
||||||
if (ins->ssa_args.dest >= SSA_FIXED_MINIMUM) continue;
|
if (ins->ssa_args.dest >= SSA_FIXED_MINIMUM) continue;
|
||||||
|
|
||||||
if (midgard_is_pinned(ctx, ins->ssa_args.dest)) continue;
|
if (midgard_is_pinned(ctx, ins->ssa_args.dest)) continue;
|
||||||
|
|
||||||
if (is_live_after(ctx, block, ins, ins->ssa_args.dest)) continue;
|
if (is_live_after(ctx, block, ins, ins->ssa_args.dest)) continue;
|
||||||
|
|
||||||
mir_remove_instruction(ins);
|
mir_remove_instruction(ins);
|
||||||
|
|
@ -3321,7 +3311,6 @@ emit_block(compiler_context *ctx, nir_block *block)
|
||||||
actualise_ssa_to_alias(ctx);
|
actualise_ssa_to_alias(ctx);
|
||||||
|
|
||||||
midgard_emit_store(ctx, this_block);
|
midgard_emit_store(ctx, this_block);
|
||||||
midgard_eliminate_orphan_moves(ctx, this_block);
|
|
||||||
midgard_pair_load_store(ctx, this_block);
|
midgard_pair_load_store(ctx, this_block);
|
||||||
|
|
||||||
/* Append fragment shader epilogue (value writeout) */
|
/* Append fragment shader epilogue (value writeout) */
|
||||||
|
|
@ -3608,6 +3597,12 @@ midgard_compile_shader_nir(nir_shader *nir, midgard_program *program, bool is_bl
|
||||||
|
|
||||||
util_dynarray_init(compiled, NULL);
|
util_dynarray_init(compiled, NULL);
|
||||||
|
|
||||||
|
/* Peephole optimizations */
|
||||||
|
|
||||||
|
mir_foreach_block(ctx, block) {
|
||||||
|
midgard_opt_dead_code_eliminate(ctx, block);
|
||||||
|
}
|
||||||
|
|
||||||
/* Schedule! */
|
/* Schedule! */
|
||||||
schedule_program(ctx);
|
schedule_program(ctx);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue