diff --git a/src/compiler/nir/nir_lower_bool_to_bitsize.c b/src/compiler/nir/nir_lower_bool_to_bitsize.c index 10de06437e2..e1c5acb89e8 100644 --- a/src/compiler/nir/nir_lower_bool_to_bitsize.c +++ b/src/compiler/nir/nir_lower_bool_to_bitsize.c @@ -69,18 +69,17 @@ make_sources_canonical(nir_builder *b, nir_alu_instr *alu, uint32_t start_idx) if (nir_src_bit_size(alu->src[i].src) != bit_size) { b->cursor = nir_before_instr(&alu->instr); nir_op convert_op = get_bool_convert_opcode(bit_size); - nir_def *new_src = - nir_build_alu(b, convert_op, alu->src[i].src.ssa, NULL, NULL, NULL); + nir_alu_instr *conv_instr = nir_alu_instr_create(b->shader, convert_op); + conv_instr->src[0].src = nir_src_for_ssa(alu->src[i].src.ssa); /* Retain the write mask and swizzle of the original instruction so * that we don’t unnecessarily create a vectorized instruction. */ - nir_alu_instr *conv_instr = - nir_instr_as_alu(nir_builder_last_instr(b)); - conv_instr->def.num_components = - alu->def.num_components; memcpy(conv_instr->src[0].swizzle, alu->src[i].swizzle, sizeof(conv_instr->src[0].swizzle)); + + nir_def *new_src = nir_builder_alu_instr_finish_and_insert(b, conv_instr); + nir_src_rewrite(&alu->src[i].src, new_src); /* The swizzle will have been handled by the conversion instruction * so we can reset it back to the default diff --git a/src/compiler/nir/nir_opt_varyings.c b/src/compiler/nir/nir_opt_varyings.c index 318aa457a9b..9678b3aa872 100644 --- a/src/compiler/nir/nir_opt_varyings.c +++ b/src/compiler/nir/nir_opt_varyings.c @@ -2248,15 +2248,15 @@ clone_ssa_impl(struct linkage_info *linkage, nir_builder *b, nir_def *ssa) return get_stored_value_for_load(linkage, &alu->instr); } - nir_def *src[4] = { 0 }; unsigned num_srcs = nir_op_infos[alu->op].num_inputs; - assert(num_srcs <= ARRAY_SIZE(src)); + nir_alu_instr *alu_clone = nir_alu_instr_create(b->shader, alu->op); - for (unsigned i = 0; i < num_srcs; i++) - src[i] = clone_ssa_impl(linkage, b, alu->src[i].src.ssa); - - clone = nir_build_alu(b, alu->op, src[0], src[1], src[2], src[3]); - nir_alu_instr *alu_clone = nir_def_as_alu(clone); + for (unsigned i = 0; i < num_srcs; i++) { + nir_def *src = clone_ssa_impl(linkage, b, alu->src[i].src.ssa); + alu_clone->src[i].src = nir_src_for_ssa(src); + memcpy(alu_clone->src[i].swizzle, alu->src[i].swizzle, + NIR_MAX_VEC_COMPONENTS); + } alu_clone->exact = alu->exact; alu_clone->no_signed_wrap = alu->no_signed_wrap; @@ -2264,10 +2264,7 @@ clone_ssa_impl(struct linkage_info *linkage, nir_builder *b, nir_def *ssa) alu_clone->def.num_components = alu->def.num_components; alu_clone->def.bit_size = alu->def.bit_size; - for (unsigned i = 0; i < num_srcs; i++) { - memcpy(alu_clone->src[i].swizzle, alu->src[i].swizzle, - NIR_MAX_VEC_COMPONENTS); - } + clone = nir_builder_alu_instr_finish_and_insert(b, alu_clone); break; }