From dd51dedefd276d2cacd7c074f0a691503cfd1a2b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marcin=20=C5=9Alusarz?= Date: Mon, 9 Aug 2021 16:43:13 +0200 Subject: [PATCH] nir: use nir_shader_instructions_pass in nir_lower_frexp Changes: - nir_metadata_preserve(..., nir_metadata_all) is called when pass doesn't make progress Reviewed-by: Alyssa Rosenzweig Part-of: --- src/compiler/nir/nir_lower_frexp.c | 69 +++++++++++++------------------------- 1 file changed, 24 insertions(+), 45 deletions(-) diff --git a/src/compiler/nir/nir_lower_frexp.c b/src/compiler/nir/nir_lower_frexp.c index f270a18..f9bd08a 100644 --- a/src/compiler/nir/nir_lower_frexp.c +++ b/src/compiler/nir/nir_lower_frexp.c @@ -163,58 +163,37 @@ lower_frexp_exp(nir_builder *b, nir_ssa_def *x) } static bool -lower_frexp_impl(nir_function_impl *impl) +lower_frexp_instr(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) { - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *alu_instr = nir_instr_as_alu(instr); - nir_ssa_def *lower; - - b.cursor = nir_before_instr(instr); - - switch (alu_instr->op) { - case nir_op_frexp_sig: - lower = lower_frexp_sig(&b, nir_ssa_for_alu_src(&b, alu_instr, 0)); - break; - case nir_op_frexp_exp: - lower = lower_frexp_exp(&b, nir_ssa_for_alu_src(&b, alu_instr, 0)); - break; - default: - continue; - } - - nir_ssa_def_rewrite_uses(&alu_instr->dest.dest.ssa, - lower); - nir_instr_remove(instr); - progress = true; - } - } + if (instr->type != nir_instr_type_alu) + return false; + + nir_alu_instr *alu_instr = nir_instr_as_alu(instr); + nir_ssa_def *lower; + + b->cursor = nir_before_instr(instr); - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); + switch (alu_instr->op) { + case nir_op_frexp_sig: + lower = lower_frexp_sig(b, nir_ssa_for_alu_src(b, alu_instr, 0)); + break; + case nir_op_frexp_exp: + lower = lower_frexp_exp(b, nir_ssa_for_alu_src(b, alu_instr, 0)); + break; + default: + return false; } - return progress; + nir_ssa_def_rewrite_uses(&alu_instr->dest.dest.ssa, lower); + nir_instr_remove(instr); + return true; } bool nir_lower_frexp(nir_shader *shader) { - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= lower_frexp_impl(function->impl); - } - - return progress; + return nir_shader_instructions_pass(shader, lower_frexp_instr, + nir_metadata_block_index | + nir_metadata_dominance, + NULL); } -- 2.7.4