diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 3f6de64e382..566173d50b2 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4602,6 +4602,7 @@ nir_instr *nir_instr_clone_deep(nir_shader *s, const nir_instr *orig, nir_alu_instr *nir_alu_instr_clone(nir_shader *s, const nir_alu_instr *orig); nir_shader *nir_shader_clone(void *mem_ctx, const nir_shader *s); +nir_function *nir_function_clone(nir_shader *ns, const nir_function *fxn); nir_function_impl *nir_function_impl_clone(nir_shader *shader, const nir_function_impl *fi); nir_constant *nir_constant_clone(const nir_constant *c, nir_variable *var); diff --git a/src/compiler/nir/nir_clone.c b/src/compiler/nir/nir_clone.c index aa25829539b..0e8ea70be50 100644 --- a/src/compiler/nir/nir_clone.c +++ b/src/compiler/nir/nir_clone.c @@ -654,18 +654,13 @@ nir_function_impl_clone(nir_shader *shader, const nir_function_impl *fi) return nfi; } -static nir_function * -clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns) +nir_function * +nir_function_clone(nir_shader *ns, const nir_function *fxn) { - assert(ns == state->ns); nir_function *nfxn = nir_function_create(ns, fxn->name); - - /* Needed for call instructions */ - add_remap(state, nfxn, fxn); - nfxn->num_params = fxn->num_params; if (fxn->num_params) { - nfxn->params = ralloc_array(state->ns, nir_parameter, fxn->num_params); + nfxn->params = ralloc_array(ns, nir_parameter, fxn->num_params); memcpy(nfxn->params, fxn->params, sizeof(nir_parameter) * fxn->num_params); } nfxn->is_entrypoint = fxn->is_entrypoint; @@ -676,7 +671,17 @@ clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns) * function and those will get processed as we clone the function_impls. * We stop here and do function_impls as a second pass. */ + return nfxn; +} +static nir_function * +clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns) +{ + assert(ns == state->ns); + + nir_function *nfxn = nir_function_clone(ns, fxn); + /* Needed for call instructions */ + add_remap(state, nfxn, fxn); return nfxn; }