Lines Matching refs:hash
86 #define HASH(hash, data) XXH32(&(data), sizeof(data), hash)
89 hash_src(uint32_t hash, const nir_src *src)
92 hash = HASH(hash, src->ssa);
93 return hash;
97 hash_alu_src(uint32_t hash, const nir_alu_src *src, unsigned num_components)
99 hash = HASH(hash, src->abs);
100 hash = HASH(hash, src->negate);
103 hash = HASH(hash, src->swizzle[i]);
105 hash = hash_src(hash, &src->src);
106 return hash;
110 hash_alu(uint32_t hash, const nir_alu_instr *instr)
112 hash = HASH(hash, instr->op);
114 /* We explicitly don't hash instr->exact. */
117 hash = HASH(hash, flags);
119 hash = HASH(hash, instr->dest.dest.ssa.num_components);
120 hash = HASH(hash, instr->dest.dest.ssa.bit_size);
125 uint32_t hash0 = hash_alu_src(hash, &instr->src[0],
127 uint32_t hash1 = hash_alu_src(hash, &instr->src[1],
131 * means that anything with two identical sources will hash to 0 and
135 hash = hash0 * hash1;
138 hash = hash_alu_src(hash, &instr->src[i],
143 hash = hash_alu_src(hash, &instr->src[i],
148 return hash;
152 hash_deref(uint32_t hash, const nir_deref_instr *instr)
154 hash = HASH(hash, instr->deref_type);
155 hash = HASH(hash, instr->modes);
156 hash = HASH(hash, instr->type);
159 return HASH(hash, instr->var);
161 hash = hash_src(hash, &instr->parent);
165 hash = HASH(hash, instr->strct.index);
170 hash = hash_src(hash, &instr->arr.index);
171 hash = HASH(hash, instr->arr.in_bounds);
175 hash = HASH(hash, instr->cast.ptr_stride);
176 hash = HASH(hash, instr->cast.align_mul);
177 hash = HASH(hash, instr->cast.align_offset);
189 return hash;
193 hash_load_const(uint32_t hash, const nir_load_const_instr *instr)
195 hash = HASH(hash, instr->def.num_components);
200 hash = HASH(hash, b);
204 hash = XXH32(instr->value, size, hash);
207 return hash;
219 hash_phi(uint32_t hash, const nir_phi_instr *instr)
221 hash = HASH(hash, instr->instr.block);
234 hash = hash_src(hash, &srcs[i]->src);
235 hash = HASH(hash, srcs[i]->pred);
238 return hash;
242 hash_intrinsic(uint32_t hash, const nir_intrinsic_instr *instr)
245 hash = HASH(hash, instr->intrinsic);
248 hash = HASH(hash, instr->dest.ssa.num_components);
249 hash = HASH(hash, instr->dest.ssa.bit_size);
252 hash = XXH32(instr->const_index, info->num_indices * sizeof(instr->const_index[0]), hash);
255 hash = hash_src(hash, &instr->src[i]);
257 return hash;
261 hash_tex(uint32_t hash, const nir_tex_instr *instr)
263 hash = HASH(hash, instr->op);
264 hash = HASH(hash, instr->num_srcs);
267 hash = HASH(hash, instr->src[i].src_type);
268 hash = hash_src(hash, &instr->src[i].src);
271 hash = HASH(hash, instr->coord_components);
272 hash = HASH(hash, instr->sampler_dim);
273 hash = HASH(hash, instr->is_array);
274 hash = HASH(hash, instr->is_shadow);
275 hash = HASH(hash, instr->is_new_style_shadow);
276 hash = HASH(hash, instr->is_sparse);
278 hash = HASH(hash, component);
281 hash = HASH(hash, instr->tg4_offsets[i][j]);
282 hash = HASH(hash, instr->texture_index);
283 hash = HASH(hash, instr->sampler_index);
284 hash = HASH(hash, instr->texture_non_uniform);
285 hash = HASH(hash, instr->sampler_non_uniform);
287 return hash;
290 /* Computes a hash of an instruction for use in a hash table. Note that this
300 uint32_t hash = 0;
304 hash = hash_alu(hash, nir_instr_as_alu(instr));
307 hash = hash_deref(hash, nir_instr_as_deref(instr));
310 hash = hash_load_const(hash, nir_instr_as_load_const(instr));
313 hash = hash_phi(hash, nir_instr_as_phi(instr));
316 hash = hash_intrinsic(hash, nir_instr_as_intrinsic(instr));
319 hash = hash_tex(hash, nir_instr_as_tex(instr));
325 return hash;
547 * the same hash for (ignoring collisions, of course).