From 5ed5e76741b93e687d3c90efd00eb8f2e2b91ead Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Thu, 19 Sep 2019 12:10:27 +0200 Subject: [PATCH] nir/algebraic: refactor inexact opcode restrictions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Refactor the code to avoid calling a lot of time to auxiliary functions when it is not really needed. Signed-off-by: Samuel Iglesias Gonsálvez Reviewed-by: Caio Marcelo de Oliveira Filho Reviewed-by: Kristian H. Kristensen Reviewed-by: Ian Romanick --- src/compiler/nir/nir_algebraic.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py index 783d0b6..fe66952 100644 --- a/src/compiler/nir/nir_algebraic.py +++ b/src/compiler/nir/nir_algebraic.py @@ -1169,6 +1169,10 @@ ${pass_name}_block(nir_builder *build, nir_block *block, continue; unsigned bit_size = alu->dest.dest.ssa.bit_size; + const bool ignore_inexact = + nir_is_float_control_signed_zero_inf_nan_preserve(execution_mode, bit_size) || + nir_is_denorm_flush_to_zero(execution_mode, bit_size); + switch (states[alu->dest.dest.ssa.index]) { % for i in range(len(automaton.state_patterns)): case ${i}: @@ -1176,9 +1180,7 @@ ${pass_name}_block(nir_builder *build, nir_block *block, for (unsigned i = 0; i < ARRAY_SIZE(${pass_name}_state${i}_xforms); i++) { const struct transform *xform = &${pass_name}_state${i}_xforms[i]; if (condition_flags[xform->condition_offset] && - !(xform->search->inexact && - (nir_is_float_control_signed_zero_inf_nan_preserve(execution_mode, bit_size) || - nir_is_denorm_flush_to_zero(execution_mode, bit_size))) && + !(xform->search->inexact && ignore_inexact) && nir_replace_instr(build, alu, xform->search, xform->replace)) { progress = true; break; -- 2.7.4