diff options
Diffstat (limited to 'src/compiler/nir/nir_builder.h')
-rw-r--r-- | src/compiler/nir/nir_builder.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 0f300aef155..cad0e133cbf 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -458,6 +458,16 @@ static inline nir_ssa_def * nir_mov_alu(nir_builder *build, nir_alu_src src, unsigned num_components) { assert(!src.abs && !src.negate); + if (src.src.is_ssa && src.src.ssa->num_components == num_components) { + bool any_swizzles = false; + for (unsigned i = 0; i < num_components; i++) { + if (src.swizzle[i] != i) + any_swizzles = true; + } + if (!any_swizzles) + return src.src.ssa; + } + nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_mov); nir_ssa_dest_init(&mov->instr, &mov->dest.dest, num_components, nir_src_bit_size(src.src), NULL); |