summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorSamuel Iglesias Gonsálvez <[email protected]>2019-09-19 12:10:27 +0200
committerSamuel Iglesias Gonsálvez <[email protected]>2019-09-19 18:57:27 +0200
commit5ed5e76741b93e687d3c90efd00eb8f2e2b91ead (patch)
tree3bab231e9358153e3d8ef4c12283a25ed09673d6 /src/compiler
parent5b5c5bf8335b79c7c1152bbdf0956598d2246567 (diff)
nir/algebraic: refactor inexact opcode restrictions
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 <[email protected]> Reviewed-by: Caio Marcelo de Oliveira Filho <[email protected]> Reviewed-by: Kristian H. Kristensen <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_algebraic.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
index 783d0b69285..fe66952ba16 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;