diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir_clone.c | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/src/compiler/nir/nir_clone.c b/src/compiler/nir/nir_clone.c index d5ae7f17793..1aaed566e98 100644 --- a/src/compiler/nir/nir_clone.c +++ b/src/compiler/nir/nir_clone.c @@ -85,6 +85,11 @@ _lookup_ptr(clone_state *state, const void *ptr, bool global) if (!state->global_clone && global) return (void *)ptr; + if (unlikely(!state->remap_table)) { + assert(state->allow_remap_fallback); + return (void *)ptr; + } + entry = _mesa_hash_table_search(state->remap_table, ptr); if (!entry) { assert(state->allow_remap_fallback); @@ -254,7 +259,8 @@ __clone_dst(clone_state *state, nir_instr *ninstr, if (dst->is_ssa) { nir_ssa_dest_init(ninstr, ndst, dst->ssa.num_components, dst->ssa.bit_size, dst->ssa.name); - add_remap(state, &ndst->ssa, &dst->ssa); + if (likely(state->remap_table)) + add_remap(state, &ndst->ssa, &dst->ssa); } else { ndst->reg.reg = remap_reg(state, dst->reg.reg); if (dst->reg.indirect) { @@ -265,26 +271,6 @@ __clone_dst(clone_state *state, nir_instr *ninstr, } } -nir_alu_instr * -nir_alu_instr_clone(nir_shader *shader, const nir_alu_instr *orig) -{ - nir_alu_instr *clone = nir_alu_instr_create(shader, orig->op); - - clone->exact = orig->exact; - - for (unsigned i = 0; i < nir_op_infos[orig->op].num_inputs; i++) - nir_alu_src_copy(&clone->src[i], &orig->src[i], clone); - - nir_ssa_dest_init(&clone->instr, - &clone->dest.dest, - orig->dest.dest.ssa.num_components, - orig->dest.dest.ssa.bit_size, - orig->dest.dest.ssa.name); - clone->dest.write_mask = orig->dest.write_mask; - - return clone; -} - static nir_alu_instr * clone_alu(clone_state *state, const nir_alu_instr *alu) { @@ -308,6 +294,16 @@ clone_alu(clone_state *state, const nir_alu_instr *alu) return nalu; } +nir_alu_instr * +nir_alu_instr_clone(nir_shader *shader, const nir_alu_instr *orig) +{ + clone_state state = { + .allow_remap_fallback = true, + .ns = shader, + }; + return clone_alu(&state, orig); +} + static nir_deref_instr * clone_deref_instr(clone_state *state, const nir_deref_instr *deref) { |