{
assert(src->is_ssa);
- nir_instr *src_instr = src->ssa->parent_instr;
+ nir_ssa_def *original_ssa = src->ssa;
+ nir_instr *src_instr = original_ssa->parent_instr;
nir_ssa_def *copy_def;
if (src_instr->type == nir_instr_type_alu) {
nir_alu_instr *alu_instr = nir_instr_as_alu(src_instr);
nir_if_rewrite_condition(parent_if, nir_src_for_ssa(copy_def));
}
+ if (nir_ssa_def_is_unused(original_ssa))
+ nir_instr_remove(src_instr);
+
return true;
}
nir_alu_src *src = &parent_alu_instr->src[index];
assert(src->src.is_ssa);
- nir_instr *src_instr = src->src.ssa->parent_instr;
+ nir_ssa_def *original_ssa = src->src.ssa;
+ nir_instr *src_instr = original_ssa->parent_instr;
if (src_instr->type != nir_instr_type_alu)
return false;
nir_instr_rewrite_src(&parent_alu_instr->instr, &src->src,
nir_src_for_ssa(def));
+ if (nir_ssa_def_is_unused(original_ssa))
+ nir_instr_remove(src_instr);
+
return true;
}