pan/midgard: Optimize branches with inverted arguments
Remove the invert on arguments to branches, and invert the branch condition instead. This saves one instruction per inverted argument. Closes #2088 Signed-off-by: Afonso Bordado <afonsobordado@az8.co> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
0e83688f47
commit
525cbe85ef
|
@ -705,5 +705,6 @@ bool midgard_opt_fuse_dest_invert(compiler_context *ctx, midgard_block *block);
|
|||
bool midgard_opt_csel_invert(compiler_context *ctx, midgard_block *block);
|
||||
bool midgard_opt_promote_fmov(compiler_context *ctx, midgard_block *block);
|
||||
bool midgard_opt_drop_cmp_invert(compiler_context *ctx, midgard_block *block);
|
||||
bool midgard_opt_invert_branch(compiler_context *ctx, midgard_block *block);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2679,6 +2679,7 @@ midgard_compile_shader_nir(nir_shader *nir, midgard_program *program, bool is_bl
|
|||
progress |= midgard_opt_fuse_dest_invert(ctx, block);
|
||||
progress |= midgard_opt_csel_invert(ctx, block);
|
||||
progress |= midgard_opt_drop_cmp_invert(ctx, block);
|
||||
progress |= midgard_opt_invert_branch(ctx, block);
|
||||
}
|
||||
} while (progress);
|
||||
|
||||
|
|
|
@ -375,3 +375,27 @@ midgard_opt_drop_cmp_invert(compiler_context *ctx, midgard_block *block)
|
|||
|
||||
return progress;
|
||||
}
|
||||
|
||||
/* Optimizes branches with inverted arguments by inverting the
|
||||
* branch condition instead of the argument condition.
|
||||
*/
|
||||
bool
|
||||
midgard_opt_invert_branch(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 (!midgard_is_branch_unit(ins->unit)) continue;
|
||||
if (!ins->branch.conditional) continue;
|
||||
if (ins->src[0] & IS_REG) continue;
|
||||
|
||||
if (mir_strip_inverted(ctx, ins->src[0])) {
|
||||
ins->branch.invert_conditional = !ins->branch.invert_conditional;
|
||||
|
||||
progress |= true;
|
||||
}
|
||||
}
|
||||
|
||||
return progress;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue