Some instructions (like flrp in i965) cannot be lowered depending on the
bit size because it doesn't support all bit sizes.

If the bit size field is defined in nir_opt_algebraic.py, take it into
account.

Signed-off-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com>
---
 src/compiler/nir/nir_algebraic.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_algebraic.py 
b/src/compiler/nir/nir_algebraic.py
index 53a7907..f3630e0 100644
--- a/src/compiler/nir/nir_algebraic.py
+++ b/src/compiler/nir/nir_algebraic.py
@@ -180,6 +180,11 @@ class SearchAndReplace(object):
       else:
          self.condition = 'true'
 
+      if len(transform) > 3:
+         self.bit_size = transform[3]
+      else:
+         self.bit_size = 0
+
       if self.condition not in condition_list:
          condition_list.append(self.condition)
       self.condition_index = condition_list.index(self.condition)
@@ -208,6 +213,7 @@ struct transform {
    const nir_search_expression *search;
    const nir_search_value *replace;
    unsigned condition_offset;
+   unsigned bit_size;
 };
 
 struct opt_state {
@@ -226,7 +232,7 @@ struct opt_state {
 
 static const struct transform ${pass_name}_${opcode}_xforms[] = {
 % for xform in xform_list:
-   { &${xform.search.name}, ${xform.replace.c_ptr}, ${xform.condition_index} },
+   { &${xform.search.name}, ${xform.replace.c_ptr}, ${xform.condition_index}, 
${xform.bit_size}},
 % endfor
 };
 % endfor
@@ -249,6 +255,9 @@ ${pass_name}_block(nir_block *block, void *void_state)
       case nir_op_${opcode}:
          for (unsigned i = 0; i < ARRAY_SIZE(${pass_name}_${opcode}_xforms); 
i++) {
             const struct transform *xform = &${pass_name}_${opcode}_xforms[i];
+            if (xform->bit_size != 0 &&
+                alu->dest.dest.ssa.bit_size != xform->bit_size)
+               continue;
             if (state->condition_flags[xform->condition_offset] &&
                 nir_replace_instr(alu, xform->search, xform->replace,
                                   state->mem_ctx)) {
-- 
2.5.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to