nir: Add a shallow clone function for nir_alu_instr
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 29 May 2019 23:48:17 +0000 (16:48 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 31 May 2019 15:47:03 +0000 (08:47 -0700)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Suggested-by: Jason Ekstrand <jason@jlekstrand.net>
Suggested-by: Matt Turner <mattst88@gmail.com>
src/compiler/nir/nir.h
src/compiler/nir/nir_clone.c

index e6ba0d9..0ed451b 100644 (file)
@@ -2888,6 +2888,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 ALU instruction. */
+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_impl *nir_function_impl_clone(nir_shader *shader,
                                            const nir_function_impl *fi);
index f400032..c82ee3c 100644 (file)
@@ -265,6 +265,26 @@ __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)
 {