Lines Matching refs:invariants

27 add_src(nir_src *src, struct set *invariants)
30 _mesa_set_add(invariants, src->ssa);
32 _mesa_set_add(invariants, src->reg.reg);
44 dest_is_invariant(nir_dest *dest, struct set *invariants)
47 return _mesa_set_search(invariants, &dest->ssa);
49 return _mesa_set_search(invariants, dest->reg.reg);
54 add_cf_node(nir_cf_node *cf, struct set *invariants)
58 add_src(&if_stmt->condition, invariants);
62 add_cf_node(cf->parent, invariants);
66 add_var(nir_variable *var, struct set *invariants)
73 _mesa_set_add(invariants, var);
77 var_is_invariant(nir_variable *var, struct set * invariants)
83 return var && (var->data.invariant || _mesa_set_search(invariants, var));
87 propagate_invariant_instr(nir_instr *instr, struct set *invariants)
92 if (!dest_is_invariant(&alu->dest.dest, invariants))
96 nir_foreach_src(instr, add_src_cb, invariants);
102 if (dest_is_invariant(&tex->dest, invariants))
103 nir_foreach_src(instr, add_src_cb, invariants);
112 if (var_is_invariant(nir_intrinsic_get_var(intrin, 0), invariants))
113 add_var(nir_intrinsic_get_var(intrin, 1), invariants);
117 if (dest_is_invariant(&intrin->dest, invariants))
118 add_var(nir_intrinsic_get_var(intrin, 0), invariants);
122 if (var_is_invariant(nir_intrinsic_get_var(intrin, 0), invariants))
123 add_src(&intrin->src[1], invariants);
141 if (!dest_is_invariant(&phi->dest, invariants))
145 add_src(&src->src, invariants);
146 add_cf_node(&src->pred->cf_node, invariants);
161 propagate_invariant_impl(nir_function_impl *impl, struct set *invariants)
166 uint32_t prev_entries = invariants->entries;
170 propagate_invariant_instr(instr, invariants);
174 if (invariants->entries > prev_entries) {
201 struct set *invariants = _mesa_pointer_set_create(NULL);
215 _mesa_set_add(invariants, var);
225 if (function->impl && propagate_invariant_impl(function->impl, invariants))
229 _mesa_set_destroy(invariants, NULL);