[Mesa-dev] [PATCH] llvmpipe: do IR counting for shader cache management after optimization.

Jose Fonseca jfonseca at vmware.com
Mon May 19 08:09:32 PDT 2014


Looks good to me.

Jose

----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
> 
> 2ea923cf571235dfe573c35c3f0d90f632bd86d8 had the side effect of IR counting
> now being done after IR optimization instead of before. Some quick analysis
> shows that there's roughly 1.5 times more IR instructions before optimization
> than after, hence the effective shader cache size got quite a bit smaller.
> Could counter this with an increase of the instruction limit but it probably
> makes more sense to count them after optimizations, so move that code.
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_type.c | 20 +++++++++++++++++++-
>  src/gallium/auxiliary/gallivm/lp_bld_type.h |  2 +-
>  src/gallium/drivers/llvmpipe/lp_state_fs.c  |  4 ++--
>  3 files changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c
> b/src/gallium/auxiliary/gallivm/lp_bld_type.c
> index 9b25e15..5a80199 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_type.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c
> @@ -394,7 +394,7 @@ lp_build_context_init(struct lp_build_context *bld,
>  /**
>   * Count the number of instructions in a function.
>   */
> -unsigned
> +static unsigned
>  lp_build_count_instructions(LLVMValueRef function)
>  {
>     unsigned num_instrs = 0;
> @@ -414,3 +414,21 @@ lp_build_count_instructions(LLVMValueRef function)
>  
>     return num_instrs;
>  }
> +
> +
> +/**
> + * Count the number of instructions in a module.
> + */
> +unsigned
> +lp_build_count_ir_module(LLVMModuleRef module)
> +{
> +   LLVMValueRef func;
> +   unsigned num_instrs = 0;
> +
> +   func = LLVMGetFirstFunction(module);
> +   while (func) {
> +      num_instrs += lp_build_count_instructions(func);
> +      func = LLVMGetNextFunction(func);
> +   }
> +   return num_instrs;
> +}
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h
> b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> index d0b490b..191cf92 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_type.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> @@ -447,7 +447,7 @@ lp_build_context_init(struct lp_build_context *bld,
>  
>  
>  unsigned
> -lp_build_count_instructions(LLVMValueRef function);
> +lp_build_count_ir_module(LLVMModuleRef module);
>  
>  
>  #endif /* !LP_BLD_TYPE_H */
> diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c
> b/src/gallium/drivers/llvmpipe/lp_state_fs.c
> index 4872e0d..0b74d15 100644
> --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
> +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
> @@ -2438,8 +2438,6 @@ generate_fragment(struct llvmpipe_context *lp,
>     LLVMBuildRetVoid(builder);
>  
>     gallivm_verify_function(gallivm, function);
> -
> -   variant->nr_instrs += lp_build_count_instructions(function);
>  }
>  
>  
> @@ -2629,6 +2627,8 @@ generate_variant(struct llvmpipe_context *lp,
>  
>     gallivm_compile_module(variant->gallivm);
>  
> +   variant->nr_instrs += lp_build_count_ir_module(variant->gallivm->module);
> +
>     if (variant->function[RAST_EDGE_TEST]) {
>        variant->jit_function[RAST_EDGE_TEST] = (lp_jit_frag_func)
>              gallivm_jit_function(variant->gallivm,
> --
> 1.9.1
> 


More information about the mesa-dev mailing list