mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 11:30:22 +01:00
nir/repair_ssa: Insert deref casts when needed
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
(cherry picked from commit 1005272a2b)
This commit is contained in:
parent
ff8122d5a2
commit
d77aa3cc1c
1 changed files with 29 additions and 2 deletions
|
|
@ -105,8 +105,35 @@ repair_ssa_def(nir_ssa_def *def, void *void_state)
|
|||
nir_block *src_block = get_src_block(src);
|
||||
if (nir_block_is_unreachable(src_block) ||
|
||||
!nir_block_dominates(def->parent_instr->block, src_block)) {
|
||||
nir_instr_rewrite_src(src->parent_instr, src, nir_src_for_ssa(
|
||||
nir_phi_builder_value_get_block_def(val, src_block)));
|
||||
nir_ssa_def *block_def =
|
||||
nir_phi_builder_value_get_block_def(val, src_block);
|
||||
|
||||
/* If def was a deref and the use we're looking at is a deref that
|
||||
* isn't a cast, we need to wrap it in a cast so we don't loose any
|
||||
* deref information.
|
||||
*/
|
||||
if (def->parent_instr->type == nir_instr_type_deref &&
|
||||
src->parent_instr->type == nir_instr_type_deref &&
|
||||
nir_instr_as_deref(src->parent_instr)->deref_type != nir_deref_type_cast) {
|
||||
nir_deref_instr *cast =
|
||||
nir_deref_instr_create(state->impl->function->shader,
|
||||
nir_deref_type_cast);
|
||||
|
||||
nir_deref_instr *deref = nir_instr_as_deref(def->parent_instr);
|
||||
cast->mode = deref->mode;
|
||||
cast->type = deref->type;
|
||||
cast->parent = nir_src_for_ssa(block_def);
|
||||
cast->cast.ptr_stride = nir_deref_instr_ptr_as_array_stride(deref);
|
||||
|
||||
nir_ssa_dest_init(&cast->instr, &cast->dest,
|
||||
def->num_components, def->bit_size, NULL);
|
||||
nir_instr_insert(nir_before_instr(src->parent_instr),
|
||||
&cast->instr);
|
||||
block_def = &cast->dest.ssa;
|
||||
}
|
||||
|
||||
nir_instr_rewrite_src(src->parent_instr, src,
|
||||
nir_src_for_ssa(block_def));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue