From d9e08e753bf4125edcdb561bbe80547999eb8e32 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 20 Feb 2019 14:03:37 +1100 Subject: [PATCH] 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 Reviewed-by: Jason Ekstrand --- src/compiler/nir/nir_opt_cse.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/nir/nir_opt_cse.c b/src/compiler/nir/nir_opt_cse.c index bf42a6a33dc..3c3617d852a 100644 --- a/src/compiler/nir/nir_opt_cse.c +++ b/src/compiler/nir/nir_opt_cse.c @@ -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; } -- 2.11.0