nir/clone: Add a helper for cloning most instruction types

@anholt needed it for nir_to_tgsi, and the desire comes up frequently.

Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6567>
This commit is contained in:
Jason Ekstrand
2020-05-18 10:39:43 -05:00
committed by Eric Anholt
parent f25e169897
commit 9121afe861
2 changed files with 13 additions and 0 deletions

View File

@@ -3855,6 +3855,9 @@ void nir_print_shader_annotated(nir_shader *shader, FILE *fp, struct hash_table
void nir_print_instr(const nir_instr *instr, FILE *fp);
void nir_print_deref(const nir_deref_instr *deref, FILE *fp);
/** Shallow clone of a single instruction. */
nir_instr *nir_instr_clone(nir_shader *s, const nir_instr *orig);
/** Shallow clone of a single ALU instruction. */
nir_alu_instr *nir_alu_instr_clone(nir_shader *s, const nir_alu_instr *orig);

View File

@@ -517,6 +517,16 @@ clone_instr(clone_state *state, const nir_instr *instr)
}
}
nir_instr *
nir_instr_clone(nir_shader *shader, const nir_instr *orig)
{
clone_state state = {
.allow_remap_fallback = true,
.ns = shader,
};
return clone_instr(&state, orig);
}
static nir_block *
clone_block(clone_state *state, struct exec_list *cf_list, const nir_block *blk)
{