From eba97645c9f22c890d7b413dbe81b532c04d99fe Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 20 Oct 2020 14:32:28 -0700 Subject: [PATCH] nir/validate: Size the set of blocks to avoid rehashing. We can use num_blocks (if it's been initialized by some pass indexing blocks) to pre-size our table, which helps on validating shaders with many blocks which would otherwise reallocate the set several times. No statistically significant performance difference on softpipe KHR-GL33.texture_swizzle.functional runtime (n=15). A previous, similar variant of this patch cut .3% of instructions in softpipe shader-db ./run shaders/closed/steam/borderlands-2/35* (an arbitrary set of shaders that completed in reasonable amount of time) according to callgrind. Reviewed-by: Jason Ekstrand Part-of: --- src/compiler/nir/nir.c | 1 + src/compiler/nir/nir_validate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index acedb0536ab..693d119671b 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -371,6 +371,7 @@ nir_function_impl_create_bare(nir_shader *shader) exec_list_make_empty(&impl->locals); impl->reg_alloc = 0; impl->ssa_alloc = 0; + impl->num_blocks = 0; impl->valid_metadata = nir_metadata_none; impl->structured = true; diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index b974bc9f46d..fe50e291c70 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -1517,6 +1517,7 @@ validate_function_impl(nir_function_impl *impl, validate_state *state) sizeof(BITSET_WORD)); _mesa_set_clear(state->blocks, NULL); + _mesa_set_resize(state->blocks, impl->num_blocks); collect_blocks(&impl->body, state); _mesa_set_add(state->blocks, impl->end_block); validate_assert(state, !exec_list_is_empty(&impl->body));