Lines Matching defs:cast
133 return deref->cast.ptr_stride;
368 /* If they're not exactly the same cast, it's hard to compare them so we
638 is_trivial_deref_cast(nir_deref_instr *cast)
640 nir_deref_instr *parent = nir_src_as_deref(cast->parent);
644 return cast->mode == parent->mode &&
645 cast->type == parent->type &&
646 cast->dest.ssa.num_components == parent->dest.ssa.num_components &&
647 cast->dest.ssa.bit_size == parent->dest.ssa.bit_size;
651 is_trivial_array_deref_cast(nir_deref_instr *cast)
653 assert(is_trivial_deref_cast(cast));
655 nir_deref_instr *parent = nir_src_as_deref(cast->parent);
658 return cast->cast.ptr_stride ==
661 return cast->cast.ptr_stride ==
679 opt_remove_cast_cast(nir_deref_instr *cast)
681 nir_deref_instr *first_cast = cast;
689 if (cast == first_cast)
692 nir_instr_rewrite_src(&cast->instr, &cast->parent,
707 opt_replace_struct_wrapper_cast(nir_builder *b, nir_deref_instr *cast)
709 nir_deref_instr *parent = nir_src_as_deref(cast->parent);
719 if (cast->type != glsl_get_struct_field(parent->type, 0))
723 nir_ssa_def_rewrite_uses(&cast->dest.ssa, nir_src_for_ssa(&replace->dest.ssa));
724 nir_deref_instr_remove_if_unused(cast);
729 opt_deref_cast(nir_builder *b, nir_deref_instr *cast)
733 if (opt_replace_struct_wrapper_cast(b, cast))
736 progress = opt_remove_cast_cast(cast);
737 if (!is_trivial_deref_cast(cast))
740 bool trivial_array_cast = is_trivial_array_deref_cast(cast);
742 assert(cast->dest.is_ssa);
743 assert(cast->parent.is_ssa);
745 nir_foreach_use_safe(use_src, &cast->dest.ssa) {
746 /* If this isn't a trivial array cast, we can't propagate into
753 nir_instr_rewrite_src(use_src->parent_instr, use_src, cast->parent);
758 assert(list_empty(&cast->dest.ssa.if_uses));
760 nir_deref_instr_remove_if_unused(cast);
777 * nir_deref_type_array or nir_deref_type_cast. If it's a cast, it
779 * trivial cast of trivial cast cases should be handled already by