[Mesa-dev] [PATCH 6/7] nir: Port to u_dynarray and delete nir_array

Eric Engestrom eric.engestrom at imgtec.com
Mon Jun 5 14:46:29 UTC 2017


On Saturday, 2017-06-03 20:11:41 +0200, Thomas Helland wrote:
> ---
>  src/compiler/Makefile.sources    |  1 -
>  src/compiler/nir/nir_array.h     | 99 ----------------------------------------
>  src/compiler/spirv/vtn_cfg.c     |  6 +--
>  src/compiler/spirv/vtn_private.h |  4 +-
>  4 files changed, 5 insertions(+), 105 deletions(-)
>  delete mode 100644 src/compiler/nir/nir_array.h
> 
> diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
> index b2a3a42818..d3447fb9de 100644
> --- a/src/compiler/Makefile.sources
> +++ b/src/compiler/Makefile.sources
> @@ -186,7 +186,6 @@ NIR_GENERATED_FILES = \
>  NIR_FILES = \
>  	nir/nir.c \
>  	nir/nir.h \
> -	nir/nir_array.h \
>  	nir/nir_builder.h \
>  	nir/nir_clone.c \
>  	nir/nir_constant_expressions.h \
> diff --git a/src/compiler/nir/nir_array.h b/src/compiler/nir/nir_array.h
> deleted file mode 100644
> index 4d7a532a7f..0000000000
> --- a/src/compiler/nir/nir_array.h
> +++ /dev/null
> @@ -1,99 +0,0 @@
> -/*
> - * Copyright © 2015 Intel Corporation
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> - * IN THE SOFTWARE.
> - *
> - * Authors:
> - *    Jason Ekstrand (jason at jlekstrand.net)
> - *
> - */
> -
> -#ifndef NIR_ARRAY_H
> -#define NIR_ARRAY_H
> -
> -#ifdef __cplusplus
> -extern "C" {
> -#endif
> -
> -typedef struct {
> -   void *mem_ctx;
> -   size_t size;
> -   size_t alloc;
> -   void *data;
> -} nir_array;
> -
> -static inline void
> -nir_array_init(nir_array *arr, void *mem_ctx)
> -{
> -   arr->mem_ctx = mem_ctx;
> -   arr->size = 0;
> -   arr->alloc = 0;
> -   arr->data = NULL;
> -}
> -
> -static inline void
> -nir_array_fini(nir_array *arr)
> -{
> -   if (arr->mem_ctx)
> -      ralloc_free(arr->data);
> -   else
> -      free(arr->data);
> -}
> -
> -#define NIR_ARRAY_INITIAL_SIZE 64
> -
> -/* Increments the size of the array by the given ammount and returns a
> - * pointer to the beginning of the newly added space.
> - */
> -static inline void *
> -nir_array_grow(nir_array *arr, size_t additional)
> -{
> -   size_t new_size = arr->size + additional;
> -   if (new_size > arr->alloc) {
> -      if (arr->alloc == 0)
> -         arr->alloc = NIR_ARRAY_INITIAL_SIZE;
> -
> -      while (new_size > arr->alloc)
> -         arr->alloc *= 2;
> -
> -      if (arr->mem_ctx)
> -         arr->data = reralloc_size(arr->mem_ctx, arr->data, arr->alloc);
> -      else
> -         arr->data = realloc(arr->data, arr->alloc);
> -   }
> -
> -   void *ptr = (void *)((char *)arr->data + arr->size);
> -   arr->size = new_size;
> -
> -   return ptr;
> -}
> -
> -#define nir_array_add(arr, type, elem) \
> -   *(type *)nir_array_grow(arr, sizeof(type)) = (elem)
> -
> -#define nir_array_foreach(arr, type, elem) \
> -   for (type *elem = (type *)(arr)->data; \
> -        elem < (type *)((char *)(arr)->data + (arr)->size); elem++)
> -
> -#ifdef __cplusplus
> -} /* extern "C" */
> -#endif
> -
> -#endif /* NIR_ARRAY_H */

Everything above this should go in a separate commit, after this one.
Stop using the old api, then delete the unused api.

Other than these two comments (other is in 3/7), this looks good to me,
code-wise at least:
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

You might want to wait for someone from these parts to tell you what
they think of the actual idea, though :)

Cheers,
  Eric

> diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
> index 54248b111d..50ef767dea 100644
> --- a/src/compiler/spirv/vtn_cfg.c
> +++ b/src/compiler/spirv/vtn_cfg.c
> @@ -183,7 +183,7 @@ vtn_add_case(struct vtn_builder *b, struct vtn_switch *swtch,
>        list_inithead(&c->body);
>        c->start_block = case_block;
>        c->fallthrough = NULL;
> -      nir_array_init(&c->values, b);
> +      util_dynarray_init(&c->values, b);
>        c->is_default = false;
>        c->visited = false;
>  
> @@ -195,7 +195,7 @@ vtn_add_case(struct vtn_builder *b, struct vtn_switch *swtch,
>     if (is_default) {
>        case_block->switch_case->is_default = true;
>     } else {
> -      nir_array_add(&case_block->switch_case->values, uint32_t, val);
> +      util_dynarray_append(&case_block->switch_case->values, uint32_t, val);
>     }
>  }
>  
> @@ -709,7 +709,7 @@ vtn_emit_cf_list(struct vtn_builder *b, struct list_head *cf_list,
>              }
>  
>              nir_ssa_def *cond = NULL;
> -            nir_array_foreach(&cse->values, uint32_t, val) {
> +            util_dynarray_foreach(&cse->values, uint32_t, val) {
>                 nir_ssa_def *is_val =
>                    nir_ieq(&b->nb, sel, nir_imm_int(&b->nb, *val));
>  
> diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h
> index 5769c0c6cd..59fcc94fcd 100644
> --- a/src/compiler/spirv/vtn_private.h
> +++ b/src/compiler/spirv/vtn_private.h
> @@ -30,7 +30,7 @@
>  
>  #include "nir/nir.h"
>  #include "nir/nir_builder.h"
> -#include "nir/nir_array.h"
> +#include "util/u_dynarray.h"
>  #include "nir_spirv.h"
>  #include "spirv.h"
>  
> @@ -115,7 +115,7 @@ struct vtn_case {
>     struct vtn_case *fallthrough;
>  
>     /* The uint32_t values that map to this case */
> -   nir_array values;
> +   struct util_dynarray values;
>  
>     /* True if this is the default case */
>     bool is_default;
> -- 
> 2.13.0
> 


More information about the mesa-dev mailing list