{
struct vars_written *written =
linear_zalloc_child(state->lin_ctx, sizeof(struct vars_written));
- written->derefs = _mesa_hash_table_create(state->mem_ctx, _mesa_hash_pointer,
- _mesa_key_pointer_equal);
+ written->derefs = _mesa_pointer_hash_table_create(state->mem_ctx);
return written;
}
written->modes = nir_var_shader_out;
break;
+ case nir_intrinsic_deref_atomic_add:
+ case nir_intrinsic_deref_atomic_imin:
+ case nir_intrinsic_deref_atomic_umin:
+ case nir_intrinsic_deref_atomic_imax:
+ case nir_intrinsic_deref_atomic_umax:
+ case nir_intrinsic_deref_atomic_and:
+ case nir_intrinsic_deref_atomic_or:
+ case nir_intrinsic_deref_atomic_xor:
+ case nir_intrinsic_deref_atomic_exchange:
+ case nir_intrinsic_deref_atomic_comp_swap:
case nir_intrinsic_store_deref:
case nir_intrinsic_copy_deref: {
- /* Destination in _both_ store_deref and copy_deref is src[0]. */
+ /* Destination in all of store_deref, copy_deref and the atomics is src[0]. */
nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]);
uintptr_t mask = intrin->intrinsic == nir_intrinsic_store_deref ?
break;
}
+ case nir_intrinsic_deref_atomic_add:
+ case nir_intrinsic_deref_atomic_imin:
+ case nir_intrinsic_deref_atomic_umin:
+ case nir_intrinsic_deref_atomic_imax:
+ case nir_intrinsic_deref_atomic_umax:
+ case nir_intrinsic_deref_atomic_and:
+ case nir_intrinsic_deref_atomic_or:
+ case nir_intrinsic_deref_atomic_xor:
+ case nir_intrinsic_deref_atomic_exchange:
+ case nir_intrinsic_deref_atomic_comp_swap:
+ kill_aliases(copies, nir_src_as_deref(intrin->src[0]), 0xf);
+ break;
+
default:
break;
}
.mem_ctx = mem_ctx,
.lin_ctx = linear_zalloc_parent(mem_ctx, 0),
- .vars_written_map = _mesa_hash_table_create(mem_ctx, _mesa_hash_pointer,
- _mesa_key_pointer_equal),
+ .vars_written_map = _mesa_pointer_hash_table_create(mem_ctx),
};
gather_vars_written(&state, NULL, &impl->cf_node);
if (state.progress) {
nir_metadata_preserve(impl, nir_metadata_block_index |
nir_metadata_dominance);
+ } else {
+#ifndef NDEBUG
+ impl->valid_metadata &= ~nir_metadata_not_properly_reset;
+#endif
}
ralloc_free(mem_ctx);