[Mesa-dev] [PATCH 5/6] nir: Fix holes in nir_instr

Eero Tamminen eero.t.tamminen at intel.com
Wed Nov 28 10:54:18 UTC 2018


Hi,

On 28.11.2018 2.38, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
> 
> Found using pahole.

While Pahole does static analysis for binaries, Valgrind has tool that
can do also _run-time_ analysis of structures and other heap allocations
utilization:
	http://valgrind.org/docs/manual/dh-manual.html

With the structure members usage frequency information, one can move
often used parts to same cache-lines and infrequently used parts
together for more efficient cache utilization.  One may also find
structure members that get never used in practice although there's
code that refers them.


	- Eero

> Changes in peak memory usage according to Valgrind massif:
> 
> mean soft fp64 using uint64:   1,343,991,403 => 1,342,759,331
> gfxbench5 aztec ruins high 11:    63,619,971 =>    63,555,571
> deus ex mankind divided 148:      62,887,728 =>    62,845,304
> deus ex mankind divided 2890:     72,399,750 =>    71,922,686
> dirt showdown 676:                69,464,023 =>    69,238,607
> dolphin ubershaders 210:          78,359,728 =>    77,822,072
> 
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>   src/compiler/nir/nir.h | 10 +++++-----
>   1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
> index a292ec73e1e..74c700026ad 100644
> --- a/src/compiler/nir/nir.h
> +++ b/src/compiler/nir/nir.h
> @@ -486,7 +486,7 @@ typedef struct nir_register {
>   #define nir_foreach_register_safe(reg, reg_list) \
>      foreach_list_typed_safe(nir_register, reg, node, reg_list)
>   
> -typedef enum {
> +typedef enum PACKED {
>      nir_instr_type_alu,
>      nir_instr_type_deref,
>      nir_instr_type_call,
> @@ -501,16 +501,16 @@ typedef enum {
>   
>   typedef struct nir_instr {
>      struct exec_node node;
> -   nir_instr_type type;
>      struct nir_block *block;
> -
> -   /** generic instruction index. */
> -   unsigned index;
> +   nir_instr_type type;
>   
>      /* A temporary for optimization and analysis passes to use for storing
>       * flags.  For instance, DCE uses this to store the "dead/live" info.
>       */
>      uint8_t pass_flags;
> +
> +   /** generic instruction index. */
> +   unsigned index;
>   } nir_instr;
>   
>   static inline nir_instr *
> 



More information about the mesa-dev mailing list