nir: Skip emitting no-op movs from the builder.
Having passes generate these is just making more work for copy propagation (and thus probably calling more optimization passes) later. Noticed while trying to debug nir_opt_algebraic() top-to-bottom having O(n^2) behavior due to not finding new matches in replacement code. Reviewed-by: Ian Romanick <ian.d.romainck@intel.com> Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
@@ -673,9 +673,8 @@ nir_replace_instr(nir_builder *build, nir_alu_instr *instr,
|
||||
instr->dest.dest.ssa.bit_size,
|
||||
&state, &instr->instr);
|
||||
|
||||
/* Inserting a mov may be unnecessary. However, it's much easier to
|
||||
* simply let copy propagation clean this up than to try to go through
|
||||
* and rewrite swizzles ourselves.
|
||||
/* Note that NIR builder will elide the MOV if it's a no-op, which may
|
||||
* allow more work to be done in a single pass through algebraic.
|
||||
*/
|
||||
nir_ssa_def *ssa_val =
|
||||
nir_mov_alu(build, val, instr->dest.dest.ssa.num_components);
|
||||
|
Reference in New Issue
Block a user