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

Brian Paul brianp at vmware.com
Sat May 17 08:00:32 PDT 2014


On 05/16/2014 02:47 PM, sroland at vmware.com wrote:
> 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,
>

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list