Lines Matching refs:deref
44 nir_deref_instr *deref, void *mem_ctx) in nir_deref_path_init() argument
46 assert(deref != NULL); in nir_deref_path_init()
59 for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { in nir_deref_path_init()
82 for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { in nir_deref_path_init()
157 nir_deref_instr_has_complex_use(nir_deref_instr *deref) in nir_deref_instr_has_complex_use() argument
159 nir_foreach_use(use_src, &deref->dest.ssa) { in nir_deref_instr_has_complex_use()
228 nir_foreach_if_use(use, &deref->dest.ssa) in nir_deref_instr_has_complex_use()
243 nir_deref_instr_array_stride(nir_deref_instr *deref) in nir_deref_instr_array_stride() argument
245 switch (deref->deref_type) { in nir_deref_instr_array_stride()
248 const struct glsl_type *arr_type = nir_deref_instr_parent(deref)->type; in nir_deref_instr_array_stride()
259 return nir_deref_instr_array_stride(nir_deref_instr_parent(deref)); in nir_deref_instr_array_stride()
261 return deref->cast.ptr_stride; in nir_deref_instr_array_stride()
294 nir_deref_instr_get_const_offset(nir_deref_instr *deref, in nir_deref_instr_get_const_offset() argument
298 nir_deref_path_init(&path, deref, NULL); in nir_deref_instr_get_const_offset()
328 nir_build_deref_offset(nir_builder *b, nir_deref_instr *deref, in nir_build_deref_offset() argument
332 nir_deref_path_init(&path, deref, NULL); in nir_build_deref_offset()
334 nir_ssa_def *offset = nir_imm_intN_t(b, 0, deref->dest.ssa.bit_size); in nir_build_deref_offset()
409 nir_deref_instr *deref = nir_instr_as_deref(instr); in nir_fixup_deref_modes() local
410 if (deref->deref_type == nir_deref_type_cast) in nir_fixup_deref_modes()
414 if (deref->deref_type == nir_deref_type_var) { in nir_fixup_deref_modes()
415 parent_modes = deref->var->data.mode; in nir_fixup_deref_modes()
417 assert(deref->parent.is_ssa); in nir_fixup_deref_modes()
419 nir_instr_as_deref(deref->parent.ssa->parent_instr); in nir_fixup_deref_modes()
423 deref->modes = parent_modes; in nir_fixup_deref_modes()
651 rematerialize_deref_in_block(nir_deref_instr *deref, in rematerialize_deref_in_block() argument
654 if (deref->instr.block == state->block) in rematerialize_deref_in_block()
655 return deref; in rematerialize_deref_in_block()
661 struct hash_entry *cached = _mesa_hash_table_search(state->cache, deref); in rematerialize_deref_in_block()
667 nir_deref_instr_create(b->shader, deref->deref_type); in rematerialize_deref_in_block()
668 new_deref->modes = deref->modes; in rematerialize_deref_in_block()
669 new_deref->type = deref->type; in rematerialize_deref_in_block()
671 if (deref->deref_type == nir_deref_type_var) { in rematerialize_deref_in_block()
672 new_deref->var = deref->var; in rematerialize_deref_in_block()
674 nir_deref_instr *parent = nir_src_as_deref(deref->parent); in rematerialize_deref_in_block()
679 nir_src_copy(&new_deref->parent, &deref->parent, new_deref); in rematerialize_deref_in_block()
683 switch (deref->deref_type) { in rematerialize_deref_in_block()
690 new_deref->cast.ptr_stride = deref->cast.ptr_stride; in rematerialize_deref_in_block()
695 assert(!nir_src_as_deref(deref->arr.index)); in rematerialize_deref_in_block()
696 nir_src_copy(&new_deref->arr.index, &deref->arr.index, new_deref); in rematerialize_deref_in_block()
700 new_deref->strct.index = deref->strct.index; in rematerialize_deref_in_block()
708 deref->dest.ssa.num_components, in rematerialize_deref_in_block()
709 deref->dest.ssa.bit_size, in rematerialize_deref_in_block()
710 deref->dest.ssa.name); in rematerialize_deref_in_block()
721 nir_deref_instr *deref = nir_src_as_deref(*src); in rematerialize_deref_src() local
722 if (!deref) in rematerialize_deref_src()
725 nir_deref_instr *block_deref = rematerialize_deref_in_block(deref, state); in rematerialize_deref_src()
726 if (block_deref != deref) { in rematerialize_deref_src()
729 nir_deref_instr_remove_if_unused(deref); in rematerialize_deref_src()
946 opt_restrict_deref_modes(nir_deref_instr *deref) in opt_restrict_deref_modes() argument
948 if (deref->deref_type == nir_deref_type_var) { in opt_restrict_deref_modes()
949 assert(deref->modes == deref->var->data.mode); in opt_restrict_deref_modes()
953 nir_deref_instr *parent = nir_src_as_deref(deref->parent); in opt_restrict_deref_modes()
954 if (parent == NULL || parent->modes == deref->modes) in opt_restrict_deref_modes()
957 assert(parent->modes & deref->modes); in opt_restrict_deref_modes()
958 deref->modes &= parent->modes; in opt_restrict_deref_modes()
1084 opt_deref_ptr_as_array(nir_builder *b, nir_deref_instr *deref) in opt_deref_ptr_as_array() argument
1086 assert(deref->deref_type == nir_deref_type_ptr_as_array); in opt_deref_ptr_as_array()
1088 nir_deref_instr *parent = nir_deref_instr_parent(deref); in opt_deref_ptr_as_array()
1090 if (nir_src_is_const(deref->arr.index) && in opt_deref_ptr_as_array()
1091 nir_src_as_int(deref->arr.index) == 0) { in opt_deref_ptr_as_array()
1104 nir_ssa_def_rewrite_uses(&deref->dest.ssa, in opt_deref_ptr_as_array()
1106 nir_instr_remove(&deref->instr); in opt_deref_ptr_as_array()
1116 assert(deref->arr.index.is_ssa); in opt_deref_ptr_as_array()
1119 deref->arr.index.ssa); in opt_deref_ptr_as_array()
1121 deref->deref_type = parent->deref_type; in opt_deref_ptr_as_array()
1122 nir_instr_rewrite_src(&deref->instr, &deref->parent, parent->parent); in opt_deref_ptr_as_array()
1123 nir_instr_rewrite_src(&deref->instr, &deref->arr.index, in opt_deref_ptr_as_array()
1191 nir_deref_instr *deref = nir_src_as_deref(load->src[0]); in opt_load_vec_deref() local
1199 if (is_vector_bitcast_deref(deref, read_mask, false)) { in opt_load_vec_deref()
1203 nir_deref_instr *parent = nir_src_as_deref(deref->parent); in opt_load_vec_deref()
1232 nir_deref_instr *deref = nir_src_as_deref(store->src[0]); in opt_store_vec_deref() local
1239 if (is_vector_bitcast_deref(deref, write_mask, true)) { in opt_store_vec_deref()
1245 nir_deref_instr *parent = nir_src_as_deref(deref->parent); in opt_store_vec_deref()
1275 nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); in opt_known_deref_mode_is() local
1276 if (deref == NULL) in opt_known_deref_mode_is()
1281 if (nir_deref_mode_must_be(deref, modes)) in opt_known_deref_mode_is()
1284 if (!nir_deref_mode_may_be(deref, modes)) in opt_known_deref_mode_is()
1309 nir_deref_instr *deref = nir_instr_as_deref(instr); in nir_opt_deref_impl() local
1311 if (opt_restrict_deref_modes(deref)) in nir_opt_deref_impl()
1314 switch (deref->deref_type) { in nir_opt_deref_impl()
1316 if (opt_deref_ptr_as_array(&b, deref)) in nir_opt_deref_impl()
1321 if (opt_deref_cast(&b, deref)) in nir_opt_deref_impl()