[Mesa-dev] [PATCH] nir/vars_to_ssa: Rework copy set handling in lower_copies_to_load_store
Timothy Arceri
timothy.arceri at collabora.com
Thu Nov 12 19:41:54 PST 2015
On Thu, 2015-11-12 at 19:02 -0800, Jason Ekstrand wrote:
> Previously, we walked through a given deref_node's copies and, after
> lowering the copy away, removed it from both the source and destination
> copy sets. This commit changes this to only remove it from the other
> node's copy set (not the one we're lowering). At the end of the loop, we
> just throw away the copy set for the node we're lowering since that node no
> longer has any copies. This has two advantages:
>
> 1) It's more efficient because we're doing potentially half as many set
> search operations.
>
> 2) It now properly handles copies from a node to itself. Perviously, it
> would delete the copy from the set when processing the destinatioon and
> then assert-fail when we couldn't find it for the source.
>
> Cc: "11.0" <mesa-stable at lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92588
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>
> ---
> src/glsl/nir/nir_lower_vars_to_ssa.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/nir/nir_lower_vars_to_ssa.c
> b/src/glsl/nir/nir_lower_vars_to_ssa.c
> index 5971507..df24510 100644
> --- a/src/glsl/nir/nir_lower_vars_to_ssa.c
> +++ b/src/glsl/nir/nir_lower_vars_to_ssa.c
> @@ -455,7 +455,8 @@ lower_copies_to_load_store(struct deref_node *node,
> struct deref_node *arg_node =
> get_deref_node(copy->variables[i], state);
>
> - if (arg_node == NULL)
> + /* Only bother removing copy entries for other nodes */
> + if (arg_node == NULL || arg_node == node)
> continue;
>
> struct set_entry *arg_entry = _mesa_set_search(arg_node->copies,
> copy);
> @@ -466,6 +467,8 @@ lower_copies_to_load_store(struct deref_node *node,
> nir_instr_remove(©->instr);
> }
>
> + node->copies = NULL;
> +
> return true;
> }
>
More information about the mesa-dev
mailing list