mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
Revert "nir/opt_peephole_select: Don't peephole_select expensive math instructions"
This reverts commit 378f996771.
This also remove the default true argument from the a2xx nir backend,
which was introduced after this commit. There should be no change in
functionality.
This commit is contained in:
parent
f59c77ef8c
commit
9dd433dfa7
10 changed files with 18 additions and 41 deletions
|
|
@ -159,7 +159,7 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively,
|
|||
NIR_PASS(progress, shader, nir_opt_if);
|
||||
NIR_PASS(progress, shader, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, shader, nir_opt_cse);
|
||||
NIR_PASS(progress, shader, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, shader, nir_opt_peephole_select, 8, true);
|
||||
NIR_PASS(progress, shader, nir_opt_algebraic);
|
||||
NIR_PASS(progress, shader, nir_opt_constant_folding);
|
||||
NIR_PASS(progress, shader, nir_opt_undef);
|
||||
|
|
|
|||
|
|
@ -1455,7 +1455,7 @@ v3d_optimize_nir(struct nir_shader *s)
|
|||
NIR_PASS(progress, s, nir_opt_dce);
|
||||
NIR_PASS(progress, s, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, s, nir_opt_cse);
|
||||
NIR_PASS(progress, s, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, s, nir_opt_peephole_select, 8, true);
|
||||
NIR_PASS(progress, s, nir_opt_algebraic);
|
||||
NIR_PASS(progress, s, nir_opt_constant_folding);
|
||||
NIR_PASS(progress, s, nir_opt_undef);
|
||||
|
|
|
|||
|
|
@ -3316,7 +3316,7 @@ bool nir_opt_move_comparisons(nir_shader *shader);
|
|||
bool nir_opt_move_load_ubo(nir_shader *shader);
|
||||
|
||||
bool nir_opt_peephole_select(nir_shader *shader, unsigned limit,
|
||||
bool indirect_load_ok, bool expensive_alu_ok);
|
||||
bool indirect_load_ok);
|
||||
|
||||
bool nir_opt_remove_phis(nir_shader *shader);
|
||||
|
||||
|
|
|
|||
|
|
@ -59,8 +59,7 @@
|
|||
|
||||
static bool
|
||||
block_check_for_allowed_instrs(nir_block *block, unsigned *count,
|
||||
bool alu_ok, bool indirect_load_ok,
|
||||
bool expensive_alu_ok)
|
||||
bool alu_ok, bool indirect_load_ok)
|
||||
{
|
||||
nir_foreach_instr(instr, block) {
|
||||
switch (instr->type) {
|
||||
|
|
@ -118,25 +117,6 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count,
|
|||
case nir_op_vec3:
|
||||
case nir_op_vec4:
|
||||
break;
|
||||
|
||||
case nir_op_fcos:
|
||||
case nir_op_fdiv:
|
||||
case nir_op_fexp2:
|
||||
case nir_op_flog2:
|
||||
case nir_op_fmod:
|
||||
case nir_op_fpow:
|
||||
case nir_op_frcp:
|
||||
case nir_op_frem:
|
||||
case nir_op_frsq:
|
||||
case nir_op_fsin:
|
||||
case nir_op_idiv:
|
||||
case nir_op_irem:
|
||||
case nir_op_udiv:
|
||||
if (!alu_ok || !expensive_alu_ok)
|
||||
return false;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!alu_ok) {
|
||||
/* It must be a move-like operation. */
|
||||
|
|
@ -180,8 +160,7 @@ block_check_for_allowed_instrs(nir_block *block, unsigned *count,
|
|||
|
||||
static bool
|
||||
nir_opt_peephole_select_block(nir_block *block, nir_shader *shader,
|
||||
unsigned limit, bool indirect_load_ok,
|
||||
bool expensive_alu_ok)
|
||||
unsigned limit, bool indirect_load_ok)
|
||||
{
|
||||
if (nir_cf_node_is_first(&block->cf_node))
|
||||
return false;
|
||||
|
|
@ -202,9 +181,9 @@ nir_opt_peephole_select_block(nir_block *block, nir_shader *shader,
|
|||
/* ... and those blocks must only contain "allowed" instructions. */
|
||||
unsigned count = 0;
|
||||
if (!block_check_for_allowed_instrs(then_block, &count, limit != 0,
|
||||
indirect_load_ok, expensive_alu_ok) ||
|
||||
indirect_load_ok) ||
|
||||
!block_check_for_allowed_instrs(else_block, &count, limit != 0,
|
||||
indirect_load_ok, expensive_alu_ok))
|
||||
indirect_load_ok))
|
||||
return false;
|
||||
|
||||
if (count > limit)
|
||||
|
|
@ -271,15 +250,14 @@ nir_opt_peephole_select_block(nir_block *block, nir_shader *shader,
|
|||
|
||||
static bool
|
||||
nir_opt_peephole_select_impl(nir_function_impl *impl, unsigned limit,
|
||||
bool indirect_load_ok, bool expensive_alu_ok)
|
||||
bool indirect_load_ok)
|
||||
{
|
||||
nir_shader *shader = impl->function->shader;
|
||||
bool progress = false;
|
||||
|
||||
nir_foreach_block_safe(block, impl) {
|
||||
progress |= nir_opt_peephole_select_block(block, shader, limit,
|
||||
indirect_load_ok,
|
||||
expensive_alu_ok);
|
||||
indirect_load_ok);
|
||||
}
|
||||
|
||||
if (progress) {
|
||||
|
|
@ -295,15 +273,14 @@ nir_opt_peephole_select_impl(nir_function_impl *impl, unsigned limit,
|
|||
|
||||
bool
|
||||
nir_opt_peephole_select(nir_shader *shader, unsigned limit,
|
||||
bool indirect_load_ok, bool expensive_alu_ok)
|
||||
bool indirect_load_ok)
|
||||
{
|
||||
bool progress = false;
|
||||
|
||||
nir_foreach_function(function, shader) {
|
||||
if (function->impl)
|
||||
progress |= nir_opt_peephole_select_impl(function->impl, limit,
|
||||
indirect_load_ok,
|
||||
expensive_alu_ok);
|
||||
indirect_load_ok);
|
||||
}
|
||||
|
||||
return progress;
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ ir3_optimize_loop(nir_shader *s)
|
|||
progress |= OPT(s, nir_opt_gcm, true);
|
||||
else if (gcm == 2)
|
||||
progress |= OPT(s, nir_opt_gcm, false);
|
||||
progress |= OPT(s, nir_opt_peephole_select, 16, true, true);
|
||||
progress |= OPT(s, nir_opt_peephole_select, 16, true);
|
||||
progress |= OPT(s, nir_opt_intrinsics);
|
||||
progress |= OPT(s, nir_opt_algebraic);
|
||||
progress |= OPT(s, nir_opt_constant_folding);
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ ir2_optimize_loop(nir_shader *s)
|
|||
progress |= OPT(s, nir_opt_dce);
|
||||
progress |= OPT(s, nir_opt_cse);
|
||||
/* progress |= OPT(s, nir_opt_gcm, true); */
|
||||
progress |= OPT(s, nir_opt_peephole_select, UINT_MAX, true, true);
|
||||
progress |= OPT(s, nir_opt_peephole_select, UINT_MAX, true);
|
||||
progress |= OPT(s, nir_opt_intrinsics);
|
||||
progress |= OPT(s, nir_opt_algebraic);
|
||||
progress |= OPT(s, nir_opt_constant_folding);
|
||||
|
|
|
|||
|
|
@ -834,7 +834,7 @@ si_lower_nir(struct si_shader_selector* sel)
|
|||
NIR_PASS(progress, sel->nir, nir_opt_if);
|
||||
NIR_PASS(progress, sel->nir, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, sel->nir, nir_opt_cse);
|
||||
NIR_PASS(progress, sel->nir, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, sel->nir, nir_opt_peephole_select, 8, true);
|
||||
|
||||
/* Needed for algebraic lowering */
|
||||
NIR_PASS(progress, sel->nir, nir_opt_algebraic);
|
||||
|
|
|
|||
|
|
@ -1591,7 +1591,7 @@ vc4_optimize_nir(struct nir_shader *s)
|
|||
NIR_PASS(progress, s, nir_opt_dce);
|
||||
NIR_PASS(progress, s, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, s, nir_opt_cse);
|
||||
NIR_PASS(progress, s, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, s, nir_opt_peephole_select, 8, true);
|
||||
NIR_PASS(progress, s, nir_opt_algebraic);
|
||||
NIR_PASS(progress, s, nir_opt_constant_folding);
|
||||
NIR_PASS(progress, s, nir_opt_undef);
|
||||
|
|
|
|||
|
|
@ -590,9 +590,9 @@ brw_nir_optimize(nir_shader *nir, const struct brw_compiler *compiler,
|
|||
const bool is_vec4_tessellation = !is_scalar &&
|
||||
(nir->info.stage == MESA_SHADER_TESS_CTRL ||
|
||||
nir->info.stage == MESA_SHADER_TESS_EVAL);
|
||||
OPT(nir_opt_peephole_select, 0, !is_vec4_tessellation, false);
|
||||
OPT(nir_opt_peephole_select, 0, !is_vec4_tessellation);
|
||||
if (compiler->devinfo->gen >= 6)
|
||||
OPT(nir_opt_peephole_select, 1, !is_vec4_tessellation, true);
|
||||
OPT(nir_opt_peephole_select, 1, !is_vec4_tessellation);
|
||||
|
||||
OPT(nir_opt_intrinsics);
|
||||
OPT(nir_opt_idiv_const, 32);
|
||||
|
|
|
|||
|
|
@ -327,7 +327,7 @@ st_nir_opts(nir_shader *nir, bool scalar)
|
|||
NIR_PASS(progress, nir, nir_opt_if);
|
||||
NIR_PASS(progress, nir, nir_opt_dead_cf);
|
||||
NIR_PASS(progress, nir, nir_opt_cse);
|
||||
NIR_PASS(progress, nir, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, nir, nir_opt_peephole_select, 8, true);
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_algebraic);
|
||||
NIR_PASS(progress, nir, nir_opt_constant_folding);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue