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);
}
}
+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)
{