nir: clone instruction set rather than removing individual entries

This reduces the time spent in nir_opt_cse() by almost a half.

The massif tool from callgrind reported no change in peak
memory use with the large doliphin uber shaders I used for
testing.

Reviewed-by: Thomas Helland<thomashelland90@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Timothy Arceri 2019-02-20 14:03:37 +11:00
parent cd0ac3a6af
commit d9e08e753b
1 changed files with 3 additions and 3 deletions

View File

@ -39,9 +39,10 @@
*/
static bool
cse_block(nir_block *block, struct set *instr_set)
cse_block(nir_block *block, struct set *dominance_set)
{
bool progress = false;
struct set *instr_set = _mesa_set_clone(dominance_set, NULL);
nir_foreach_instr_safe(instr, block) {
if (nir_instr_set_add_or_rewrite(instr_set, instr)) {
@ -55,8 +56,7 @@ cse_block(nir_block *block, struct set *instr_set)
progress |= cse_block(child, instr_set);
}
nir_foreach_instr(instr, block)
nir_instr_set_remove(instr_set, instr);
_mesa_set_destroy(instr_set, NULL);
return progress;
}