nir/search: Propagate exactness into newly created expressions
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 17 Mar 2016 22:20:34 +0000 (15:20 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 23 Mar 2016 23:27:52 +0000 (16:27 -0700)
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/compiler/nir/nir_search.c

index 6df662aa5312a25fe2ef722b714a0be2313a0ecb..6f6a9425c18ab579c3303e62bb80dd3d0ab362c0 100644 (file)
@@ -406,7 +406,7 @@ bitsize_tree_filter_down(bitsize_tree *tree, unsigned size)
 
 static nir_alu_src
 construct_value(const nir_search_value *value,
-                unsigned num_components, bitsize_tree *bitsize,
+                unsigned num_components, bitsize_tree *bitsize, bool exact,
                 struct match_state *state,
                 nir_instr *instr, void *mem_ctx)
 {
@@ -420,6 +420,7 @@ construct_value(const nir_search_value *value,
       nir_alu_instr *alu = nir_alu_instr_create(mem_ctx, expr->opcode);
       nir_ssa_dest_init(&alu->instr, &alu->dest.dest, num_components,
                         bitsize->dest_size, NULL);
+      alu->exact = exact;
       alu->dest.write_mask = (1 << num_components) - 1;
       alu->dest.saturate = false;
 
@@ -431,7 +432,7 @@ construct_value(const nir_search_value *value,
             num_components = nir_op_infos[alu->op].input_sizes[i];
 
          alu->src[i] = construct_value(expr->srcs[i],
-                                       num_components, bitsize->srcs[i],
+                                       num_components, bitsize->srcs[i], exact,
                                        state, instr, mem_ctx);
       }
 
@@ -563,8 +564,8 @@ nir_replace_instr(nir_alu_instr *instr, const nir_search_expression *search,
                      instr->dest.dest.ssa.bit_size, NULL);
 
    mov->src[0] = construct_value(replace,
-                                 instr->dest.dest.ssa.num_components,
-                                 tree, &state, &instr->instr, mem_ctx);
+                                 instr->dest.dest.ssa.num_components, tree,
+                                 instr->exact, &state, &instr->instr, mem_ctx);
    nir_instr_insert_before(&instr->instr, &mov->instr);
 
    nir_ssa_def_rewrite_uses(&instr->dest.dest.ssa,